0

Windows で使用していた C# コードを、Mono 経由で Mac で使用できるように移植しています。このコードでは、アンマネージ C++ dll に P\Invoke します。残念ながら、私たちのビルド プロセスでは、Mac 上のフレームワーク ファイルしか配布できず、dylib ファイルは配布できません。

コードを Mono 用に移植すると、すべて正常に動作しますが、P\Invoke は Framework ファイルに組み込まれます。デフォルトの検索パスにあるはずの /Library/Frameworks フォルダーにフレームワーク ファイルを追加しようとしましたが、DllNotFound 例外が引き続き発生します。Mono Interop Guideによると、 Monoが Mac で検索する拡張子として .so を追加すると問題が発生します。そのため、構成ファイルを追加して、ターゲットを .framework ファイルとして指定しようとしましたが、それでも同じ例外が発生しました。Mono ガイドでは、フレームワークで P\Invoke を実行するとより複雑になると述べていますが、正確な問題やそれらを回避する方法については言及していません。

Mono のフレームワークに P\Invoke する方法を知っている人はいますか?

4

1 に答える 1

0

生成されたアプリバンドル内にフレームワークを配置できます。この質問に対する私の回答を参照してください: MonoforMacでのDllImportのネイティブライブラリのパスの設定

@executable_path/../Frameworksまた、XCodeのビルド構成で、アプリケーションディレクトリ(つまり)を基準にしてフレームワークのインストールディレクトリを設定してください。https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.htmlを参照してください。

A.frameworkこれは、複数のフレームワークをバンドルする場合に特に重要です。たとえば、に依存するメソッドをP/Invokeする場合などですB.framework

于 2012-10-18T05:04:37.737 に答える