4

Unity内でiOSネイティブフレームワークを使用しようとしていますが、その方法がわかりません。

C#スクリプト内で、次のようなネイティブ関数を呼び出します。

[DllImport ("__Internal")]
    private static extern void writeHello();

    void Start () {
        writeHello();
    }

私はこのように私のプロジェクト内にiOSフレームワークをドラッグしました:

私の画像へのリンク

しかし、アプリをiPadにデプロイすると、xCodeに次のエラーが表示されます。

アーキテクチャarmv7の未定義のシンボル: "_ writeHello"、参照元:RegisterMonoModules.oのRegisterMonoModules()ld:アーキテクチャarmv7のシンボルが見つかりませんclang:エラー:リンカーコマンドが終了コード1で失敗しました(呼び出しを確認するには-vを使用)

理由がわからないし、自分がやろうとしていることが可能かどうかもわかりません。ヘルプ!:)

ありがとう、千人

4

4 に答える 4

3

iOS フレームワークは、Unity ではなく、xCode で生成されたプロジェクトに配置する必要があります。

また、フレームワークの関数はextern "C"ブロックでラップする必要があります (ここに示すように)。

その後、C# で使用できるようになりますdllimport

于 2012-11-07T10:10:27.497 に答える
1

ドキュメントによると、Assets / Plugins / iOSフォルダーにある拡張子.a、.m、.mm、.c、.cppのすべてのファイルは、生成されたXcodeプロジェクトに自動的にマージされます。ドキュメントには、サブフォルダーは現在サポートされていないことも記載されているため、この例では、「framework-helloUnity.framework」フォルダーは無視されます。

.mファイルはデフォルトでCスタイルのバインディングになっているのに対し、.mmファイルはデフォルトでC++スタイルのバインディングになっていることに注意してください。つまり、Heiloが提案したように、キーワードを使用しない限りextern "C"、.mmファイルまたは.cppファイルに関数を配置すると関数は見つかりません。

言い換えれば、あなたが以下を置くならば:

void writeHello() {}

という名前のファイルAssets/Plugins/iOS/myTestFile.mで、コードをコンパイルする必要があります。

于 2012-11-08T22:02:09.750 に答える
0

この投稿のおかげで解決策が見つかりました:C ++メソッドからObjective-Cメソッドを呼び出しますか?

そのようにすることによって:

void myWriteHello( void *test) {
    [(id)test writeHello];
}

- (void) writeHello
{
    NSLog(@"Hello World!");
}

UnityからC関数を呼び出す

于 2012-11-07T14:06:29.550 に答える
0

Xcode プロジェクトに次の関数を記述しました any class extern "C" { -(void) writeHello {

} }

于 2014-04-15T06:15:04.437 に答える