2011-09-15 10 views
2

DllImport属性を使用してアンマネージアセンブリと通信するコードがあります。 OS Xでは、このアセンブリはフレームワークとしてインストールされます。MonoMacプラットフォームInteropとフレームワーク

[DllImport("libraryname", CallingConvention = CallingConvention.Cdecl)] 
public static extern void FunctionName(); 

しかし、フレームワークを解決することができなかったためと考え、モノラルでDllNotFoundExceptionをスローします。彼らはしている ない限り

のMac OS Xプラットフォームでは、libの接頭辞とは.dylibサフィックスを持っている:彼らはそこで、この小さなナゲットを持ってhttp://www.mono-project.com/Interop_with_Native_Libraries

私はモノのマニュアルに見えましたフレームワークの場合、彼らはディレクトリであり、物事は より複雑になります。

しかし、彼らは(私の知る限りは見つけることができるように)ディレクトリである場合、私は何をすべきかについての情報が含まれていません。誰もがこれを経験している?

答えて

4

このソリューションは、システムフレームワークの場所が変わらないため、システムフレームワークと相互運用したい場合には非常に簡単です。例えば

、あなたがCoreFoundation枠組み、使用中CFRelease機能にアクセスしたい場合:

[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", EntryPoint="CFRelease")] 
public static extern void CFRelease(IntPtr cf); 

モノローダは問題なくフレームワークをロードします。

+1

ええ、私はすべての異なるオプションで遊んだ。 Framesディレクトリがすでに検索パスに入っているので、私は "Library.framework/Library"をやらなければならなかった。 – sohum