Hello, This is weird. For the native library, I use @executable_path in the attribute and it works both in non-bundled and bundled version.
Have you tried to get the executable path in both version to decide what to put in the attribute ? To get the "real" executable path, you can use the snippet of code found the ObjectiveCRuntime.MainBundlePath property (base on _NSGetExecutablePath native call). Regards, Laurent Etiemble. 2010/3/17 anthony taranto <anthony.tara...@gmail.com> > Laurent, > > Ah, I'd used @executable_path in a dll.config, it hadn't occurred to > me that it could also be passed to DllImportAttribute. > > If I switch my DllImport parameter to use @executable_path/../..., I > can successfully call the unmanaged methods when running my > application as a standalone app bundle, however, it no longer works > when running from a non-standalone app build. > > If I can use the same string for both configurations, that would > obviously be ideal. As it is now, I'll probably set up a try/catch > fallback so that I can operate in both configurations. > > Thanks, > > --Anthony > > On Wed, Mar 17, 2010 at 1:56 AM, Laurent Etiemble > <laurent.etiem...@monobjc.net> wrote: > > Hello, > > If you only want to load the framework (to register some classes), you > can > > use the ObjectiveCRuntime.LoadFramework method. It is able to pick > private > > framework within an application bundle. > > If you want to access a function within the private framework, then you > have > > to use the @executable_path tag in the DllImport attribute. > > The @executable_path will be expanded at runtime by the dylib loader and > > will refer to the path of the executable. Monobjc uses this trick to be > able > > to load at runtime its native library. In you case, the DllImport tag > will > > look like: > > [DllImport("@executable_path/../Frameworks/Foo.framework/Foo", ...)] > > Regards, Laurent Etiemble. > > > > 2010/3/17 anthony taranto <anthony.tara...@gmail.com> > >> > >> Here's the mono output when running my standalone app with > >> MONO_LOG_LEVEL="debug" MONO_LOG_MASK="dll" > >> > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport attempting to load: > >> 'Contents/Frameworks/Foo.framework/Foo'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading location: > >> 'libContents/Frameworks/Foo.framework/Foo.dylib'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library: > >> 'dlopen(libContents/Frameworks/Foo.framework/Foo.dylib, 9): image not > >> found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading location: > >> 'libContents/Frameworks/Foo.framework/Foo.so'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library: > >> 'dlopen(libContents/Frameworks/Foo.framework/Foo.so, 9): image not > >> found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading location: > >> 'libContents/Frameworks/Foo.framework/Foo.bundle'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library: > >> 'dlopen(libContents/Frameworks/Foo.framework/Foo.bundle, 9): image not > >> found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading library: > >> './libContents/Frameworks/Foo.framework/Foo.dylib'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library > >> 'dlopen(./libContents/Frameworks/Foo.framework/Foo.dylib, 9): image > >> not found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading library: > >> './libContents/Frameworks/Foo.framework/Foo.so'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library > >> 'dlopen(./libContents/Frameworks/Foo.framework/Foo.so, 9): image not > >> found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading library: > >> './libContents/Frameworks/Foo.framework/Foo.bundle'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library > >> 'dlopen(./libContents/Frameworks/Foo.framework/Foo.bundle, 9): image > >> not found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading: 'Contents/Frameworks/Foo.framework/Foo'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library > >> 'dlopen(Contents/Frameworks/Foo.framework/Foo, 9): image not found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading location: > >> 'libContents/Frameworks/Foo.framework/Foo.dylib'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library: > >> 'dlopen(libContents/Frameworks/Foo.framework/Foo.dylib, 9): image not > >> found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading location: > >> 'libContents/Frameworks/Foo.framework/Foo.so'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library: > >> 'dlopen(libContents/Frameworks/Foo.framework/Foo.so, 9): image not > >> found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading location: > >> 'libContents/Frameworks/Foo.framework/Foo.bundle'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library: > >> 'dlopen(libContents/Frameworks/Foo.framework/Foo.bundle, 9): image not > >> found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading library: > >> './libContents/Frameworks/Foo.framework/Foo.dylib'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library > >> 'dlopen(./libContents/Frameworks/Foo.framework/Foo.dylib, 9): image > >> not found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading library: > >> './libContents/Frameworks/Foo.framework/Foo.so'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library > >> 'dlopen(./libContents/Frameworks/Foo.framework/Foo.so, 9): image not > >> found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading library: > >> './libContents/Frameworks/Foo.framework/Foo.bundle'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library > >> 'dlopen(./libContents/Frameworks/Foo.framework/Foo.bundle, 9): image > >> not found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport loading: > >> 'libContents/Frameworks/Foo.framework/Foo'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> Mono-INFO: DllImport error loading library > >> 'dlopen(libContents/Frameworks/Foo.framework/Foo, 9): image not > >> found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> (MyProject.exe:9524): Mono-WARNING **: DllImport unable to load > >> library 'dlopen(libContents/Frameworks/Foo.framework/Foo, 9): image > >> not found'. > >> 3/16/10 6:55:02 PM [0x0-0xe33e33].com.MyCompany.MyProject[9524] > >> System.DllNotFoundException: Contents/Frameworks/Foo.framework/Foo > >> > >> > >> On Tue, Mar 16, 2010 at 6:42 PM, anthony taranto > >> <anthony.tara...@gmail.com> wrote: > >> > Hello, > >> > > >> > I'm going to ship a custom framework in my monobjc application's app > >> > bundle. This framework is located at > >> > "Contents/Frameworks/Foo.framework/Framework". > >> > > >> > When I build a _non_ standalone application bundle (mkappl), i'm able > >> > to successfully invoke methods in this framework using > >> > [DllImport("Contents/Frameworks/Foo.framework/Framework")]. However. > >> > when I build a standalone application bundle (mkbundle, mkappl), the > >> > DllImport fails to find the correct directory. > >> > > >> > How should I arrange things so that I can load this framework from > >> > both standalone and non standalone application bundles? Is there some > >> > relative path or dllmap magic that I'm missing? > >> > > >> > Thanks. > >> > > >> > --Anthony > >> > > > > > >