x


dll loading in editor on windows

I wrote a c++ plugin, that does some stuff with fmod. The plugin itself seems to work just fine, and I can use it in a Windows standalone build when i copy the fmodex.dll next to the executable. However if I run the game in the editor I always get a DllNotFoundException. My understanding of dll's on windows is, that windows will look up the dll in the system32 folder (XP), then in the application folder and the current working directory. So I printed out the current working directory, which - no surprise - is the projects root folder. However, copying the fmodex.dll to that folder doesn't get rid of the Exception.

I have another project where I did something very similar (only with another dll) and this works. So any ideas what could go wrong here?

more ▼

asked Jan 16 '10 at 10:57 PM

StephanK gravatar image

StephanK
6k 39 53 93

(comments are locked)
10|3000 characters needed characters left

4 answers: sort voted first

I think I finally have a clue what's going on. Since Unity2.6 switched to use fmod as audio core (which is a great idea!) there is a "fmodex.dll" in the edior application directory. Since my plugin was probably built using a different version of the fmodex lib it seems to find the one in the app directory and tries to load that. But since they are different versions the loader is not satisfied and I get the DllNotFoundException. At least that's what I think is going on.

more ▼

answered Jan 20 '10 at 12:00 PM

StephanK gravatar image

StephanK
6k 39 53 93

(comments are locked)
10|3000 characters needed characters left

At least on the Mac, you are supposed to create a folder titled 'Plugins' inside the project view (assets directory). All plugin DLLs are to reside within that folder.

Try the same thing on windows.

From Unity Manual on Plugins

and an excerpt:

Once you have built your bundle you have to copy it to Assets->Plugins folder. Unity will then find it by its name when you define a function like this:

[DllImport ("PluginName")]
private static extern float FooPluginFunction ();

Please note that PluginName should not include the extension of the filename. Be aware that whenever you change code in the Plugin you will have to recompile scripts in your project or else the plugin will not have the latest compiled code.

more ▼

answered Jan 17 '10 at 03:19 PM

Brian Kehrer gravatar image

Brian Kehrer
2.8k 9 11 50

I did that. The problem is not that it simply not finds the plugin dll, but rather it does find it and then tries to find the fmodex.dll it depends on. I've put the dll in the project root, assets and assets/plugins folder just to be sure, but it just doesn't find it. The strange thing is, that when I build the project and start it standalone it DOES find the fmodex.dll which is right next to the executable...

Jan 17 '10 at 04:12 PM StephanK

I understand now. Unfortunately I don't have an answer, I haven't tried interdependent plugins.

Jan 17 '10 at 09:39 PM Brian Kehrer

Normally this works as long as the dependencies live in the projects root folder. I think my problem is a bit more obscure as fmodex.dll seems to somehow depend on the dreaded dwmapi.dll and I'm on XP. Only thing I really don't get is why it's working in a standalone build, as the dll search paths should be the same for both.

Jan 18 '10 at 12:44 PM StephanK
(comments are locked)
10|3000 characters needed characters left

[Removed Answer]

more ▼

answered Jun 10 '10 at 05:13 PM

Graeme gravatar image

Graeme
53 9 9 15

(comments are locked)
10|3000 characters needed characters left

I got the same problem here when trying to load FModEx.dll + FMod_Event.dll in the Editor (build works fine).

The conclusion I got was that unity editor's FModEx.dll (the one unity uses since 2.61) is causing "Dll Hell" as the editor process binds it's own dll, we can't load our version. FMod_Event.dll has a dependency on FModEx.dll but it does not reconize unity's version. The result is that you get a "DllNotFoundException" when FMod_Event tries to find FModEx.

The solution I found was renaming my version, not unity's, of FModEx.dll to FModE2.dll and changing every occurrence of that name inside both dlls, Ex and Event, with a HexEditor. Now everything works fine. :-D

When building for Mac you will probably have to make your wrapper point towards the regular Dylibs. Somehtin like this:

    public class VERSION
{
    public const int    number = 0x00042808;

#if MAC

    public const string dll    = "libfmodex.dylib";

#else

    public const string dll    = "fmode2.dll";

#endif

}
more ▼

answered Feb 11 '10 at 11:06 AM

JC gravatar image

JC
90 4 4 12

hm, this doesnt work for me. did you change it inside the according libfmod_event.dylib and libfmodex.dll as well?

Apr 19 '10 at 04:46 PM seventyfive

@marco: Well, that's a good question. I don't recall changing the the dylibs for the Mac build but I'm sure I had to build another Wrapper pointing them instead of the regular DLLs.

Apr 19 '10 at 09:00 PM JC

ah, that makes sense, I will try that.

May 02 '10 at 10:02 PM seventyfive
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x394
x231

asked: Jan 16 '10 at 10:57 PM

Seen: 4178 times

Last Updated: Jan 16 '10 at 10:57 PM