2012-10-08 5 views
0

Mono를 통해 Mac에서 사용하기 위해 Windows에있는 C# 코드를 포팅합니다. 우리 코드에서는 P \ Invoke를 관리되지 않는 C++ dll에 넣습니다. 불행하게도 우리가 가지고있는 빌드 프로세스는 dylib 파일이 아닌 Mac에서 프레임 워크 파일만을 제공 할 수 있습니다.Mono Mac에서 .framework 파일로 P/Invoke

Mono 용 코드를 포팅했을 때 모든 것이 잘 작동하지만 P \ Invoke가 프레임 워크 파일에 잘 작동합니다. 프레임 워크 파일을 기본 검색 경로에 있어야하는/Library/Frameworks 폴더에 추가하려고 시도했지만 DllNotFound 예외가 계속 발생합니다. Mono Interop Guide에 따르면 Mono가 .so를 Mac에서 검색 할 수있는 확장자로 추가하는 데 문제가 있습니다. 그래서 설정 파일을 추가하고 .framework 파일로 대상을 제공했지만 여전히 동일한 예외가 발생했습니다. Mono 가이드는 Frameworks를 사용하여 P \ Invoke를 수행하는 것이 더 복잡해졌지만 정확한 문제 또는 그 문제를 해결하는 방법에 대해서는 언급하지 않았습니다.

아무도 모노 프레임 워크로 P \ Invoke하는 방법을 알고 있습니까?

+0

이 문제는 해결되었습니다. 문제는 메인 프레임 워크 자체가 발견되었지만 내 시스템에 의존하지 않는 다른 라이브러리가 내 시스템에 존재한다는 것입니다. 이러한 라이브러리를 복사하면 P/Invoke가 정상적으로 작동합니다. – user408410

답변

0

당신은 생성 된 응용 프로그램 번들 내부에 프레임 워크를 넣어이 질문에 대한 내 대답을 볼 수 Setting path of the Native Library for DllImport on Mono for Mac

는 또한 엑스 코드의 빌드에서 응용 프로그램 디렉토리 (. 즉 @executable_path/../Frameworks)에 프레임 워크의 설치 디렉토리의 상대를 설정해야합니다 구성; https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html을 참조하십시오.

이것은 하나 이상의 프레임 워크를 묶을 때 특히 중요합니다. 예를 들어 B.framework에 의존하는 A.framework의 일부 메소드로 P/Invoke하는 경우와 같이.