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);

Mono 加载器将毫无问题地加载框架。

于 2011-09-15T18:23:09.737 回答