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 загрузит фреймворк без проблем.

Другие вопросы по тегам