2011-09-15 54 views
2

我有代码使用DllImport属性与非托管程序集进行通信。在OS X中,此程序集作为框架安装。MonoMac平台Interop与框架

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

但是,这将引发在单一个DllNotFoundException,大概是因为它一直未能解决的框架。

我看了下单文档中:http://www.mono-project.com/Interop_with_Native_Libraries

他们在那里有这个小金块:

的Mac OS X平台上有一个lib前缀和后缀名为.dylib,除非 他们是一个框架,在这种情况下,他们是一个目录,事情变得更加复杂。

但他们不包含任何信息(只要我能找到)关于是否目录我应该做的。任何人都有这样的经验吗?

回答

4

这个解决方案非常简单,如果您想与系统框架互操作,因为它的位置永不改变。

例如,如果您要访问的CFRelease功能在CoreFoundation框架,使用:

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

Mono的装载机将加载框架没有问题。

+1

是的,我玩过所有不同的选项。原来我只需要做“Library.framework/Library”,因为Frameworks目录已经在搜索路径中。 – sohum