2

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

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

ただし、これは、おそらくフレームワークを解決できなかったために、MonoでDllNotFoundExceptionをスローします。

私はMonoのドキュメントを調べました:http ://www.mono-project.com/Interop_with_Native_Libraries

彼らはそこにこの小さなナゲットを持っています:

Mac OS Xプラットフォームには、フレームワークでない限り、libプレフィックスと.dylibサフィックスがあります。フレームワークの場合、それらはディレクトリであり、事態はさらに複雑になります。

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

4

1 に答える 1

4

このソリューションは、システムフレームワークと相互運用する場合、その場所が変更されないため、非常に簡単です。

たとえば、フレームワークのCFRelease関数にアクセスする場合は、次を使用します。CoreFoundation

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

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

于 2011-09-15T18:23:09.737 に答える