MonoMac Platform Взаимодействие с платформой - PullRequest
2 голосов
/ 15 сентября 2011

У меня есть код, который использует атрибут 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, если только они являются платформой, в этом случае они каталог, и все становится более сложный.

Но они не содержат никакой информации (насколько я мог найти) о том, что мне следует делать, если является каталогом. У кого-нибудь есть опыт в этом?

1 Ответ

4 голосов
/ 15 сентября 2011

Это решение довольно простое, если вы хотите взаимодействовать с системной платформой, поскольку ее местоположение никогда не меняется.

Например, если вы хотите получить доступ к функции CFRelease в CoreFoundation framework, используйте:

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

Загрузчик Mono загрузит фреймворк без проблем.

...