MonoMac Platform Взаимодействие с платформой
У меня есть код, который использует атрибут DllImport для общения с неуправляемой сборкой. В OS X эта сборка установлена как фреймворк.
[DllImport("libraryname", CallingConvention = CallingConvention.Cdecl)]
public static extern void FunctionName();
Однако это вызывает исключение DllNotFoundException в Mono, возможно, потому что он не смог разрешить структуру.
Я посмотрел в документации Mono: http://www.mono-project.com/Interop_with_Native_Libraries
У них есть этот маленький самородок:
Платформы Mac OS X имеют префикс lib и суффикс.dylib, если только они не Framework, в этом случае они являются каталогом, и все становится более сложным.
Но они не содержат никакой информации (насколько я мог найти) о том, что я должен делать, если это каталог. У кого-нибудь есть опыт в этом?
1 ответ
Это решение довольно простое, если вы хотите взаимодействовать с системной платформой, поскольку ее местоположение никогда не меняется.
Например, если вы хотите получить доступ к CFRelease
функция в CoreFoundation
рамки, использование:
[DllImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", EntryPoint="CFRelease")]
public static extern void CFRelease(IntPtr cf);
Загрузчик Mono загрузит фреймворк без проблем.