[Mono-list] DllImport behaves different between .Net and Mono

Steven Schulze sschulze at vmware.com
Fri Jul 27 13:24:55 EDT 2007


According to the link you provided, it says the DLL is searched like this:

1) The directory from which the application loaded. 
2) The current directory.
3) ...

At least from my testing, neither of the first two cases work as stated.  I
tried setting the current path to where the DLL is located before calling the
external method, but it still failed to find the DLL.

I will keep trying different things...

Steven

  

> -----Original Message-----
> From: mono-list-bounces at lists.ximian.com 
> [mailto:mono-list-bounces at lists.ximian.com] On Behalf Of Andreia Gaita
> Sent: Friday, July 27, 2007 10:00 AM
> To: Mono-list at lists.ximian.com
> Subject: Re: [Mono-list] DllImport behaves different between 
> .Net and Mono
> 
> On 7/27/07, Steven Schulze <sschulze at vmware.com> wrote:
> > On .Net, the DLL is found if I just use the dll name by itself, not 
> > the full path, something like:
> >
> >     [DllImport(@"Foo.dll")]
> >     public static extern bool Bar(string text);
> >
> > On Mono, the DLL is not found unless I hardcode the full path, 
> > something like this:
> >
> >
> >     [DllImport(@"C:\Program Files\MyApp\Foo.dll")]
> >     public static extern bool Bar(string text);
> >
> > This presents a problem because I cannot make assumptions 
> about where 
> > the app will end up when it gets installed.  It seems a bad idea to 
> > hard code the absolute path of anything at compile time.  How can I 
> > make Mono act like .Net in this regard?  Once again, this 
> part of the 
> > code will only get executed when running on Windows.
> 
> There is a lot of code in mono itself that imports 
> windows-specific dlls to interact with the system, and it has 
> no problems doing so with the dll name. Please refer to 
> http://www.mono-project.com/PInvoke#Library_Handling for the 
> proper way of using DllImport on mono.
> You can also check why your mono is not loading the dll by 
> calling, on a mono command prompt:
> 
> X:> set MONO_LOG_LEVEL=debug
> X:> set MONO_LOG_MASK=dll
> X:> mono --debug [nameofprogram.exe] >log.txt
> 
> This will log to a file named log.txt a lot of debug 
> messages, including those about locating dlls, so that if 
> there are problems locating your dll, it should show up there.
> 
> andreia gaita
> _______________________________________________
> Mono-list maillist  -  Mono-list at lists.ximian.com 
> http://lists.ximian.com/mailman/listinfo/mono-list
> 


More information about the Mono-list mailing list