2011-09-15 2 views
2

DllImport 특성을 사용하여 관리되지 않는 어셈블리와 통신하는 코드가 있습니다. OS X에서는이 어셈블리가 프레임 워크로 설치됩니다.MonoMac 플랫폼 Interop with Framework

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

그러나, 프레임 워크를 해결하지 못한 아마도 때문에, 모노에서 DllNotFoundException가 발생합니다. 그들이있어 하지 않는

맥 OS X 플랫폼은, lib 디렉토리 접두사와 .dylib 접미사가 : 그들은 거기에이 작은 덩어리가 http://www.mono-project.com/Interop_with_Native_Libraries

:

나는 모노 설명서의 모습 프레임 워크, 그 경우 그들은 디렉토리와 일들이 더 복잡해 얻을.

하지만 그들은 (지금까지의 내가 찾을 수있는 것처럼) 그 디렉토리 인 경우 내가 무엇을해야하는지에 대한 정보가 포함되어 있지 않습니다. 누구나이 일을 해 본 경험이 있습니까?

답변

4

이 솔루션은 위치가 변경되지 않는 시스템 프레임 워크와 상호 운용하려는 경우 매우 간단합니다. 예를 들어

, 당신은 CoreFoundation 프레임 워크 사용에 CFRelease 기능에 액세스하려면 :

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

모노 로더가 문제없이 프레임 워크를로드합니다.

+1

네, 저는 모든 다른 옵션으로 놀았습니다. Frames 디렉토리가 이미 검색 경로에 있으므로 "Library.framework/Library"를 수행해야했습니다. – sohum