こんにちわ、Unityエンジニアのオオバです。

本記事は前回からの続きに当たります。
UnityとObjective-Cのやりとり

Unityでネイティブプラグインを作る上でint型のやり取りは、すんなり成功したのですが、String型でハマってしまったのでメモ。

この記事の内容

やりたいこと

失敗コード

Unityネイティブプラグイン文字列やり取りの失敗例 · GitHub

この失敗コードを実機でビルドしてみると、、、以下の箇所で以下のエラーが出力されます。

inline void il2cpp_codegen_marshal_free(void* ptr)  
{
    il2cpp::vm::PlatformInvoke::MarshalFree(ptr);  
}

エラー内容

nativePlugin(976,0x1b1463b40) malloc: *** error for object 0x10083ffd5: pointer being freed was not allocated  

[Unity] il2cpp::vm::PlatformInvoke::MarshalFreeでSIGBARTで落ちる | script life 千夜一夜 プログラミング別館
似たようなトラブルの記事は見つかりますが、これではないんですね。

直訳すると、解放されたポインタが割り当てられなかったというエラーになります。

いろいろ調べた結果[Unity] C#とObjective-Cの連携まとめ - Qiita こちらの記事内容で解決しました。

文字列の場合は明示的にメモリを確保し、そこに文字列をコピーし、そのポインタを返さないといけない模様です。

成功コード

先のサイトを参考に修正したコードがコチラ。

BridgeCSharpToObjC.cs · GitHub

何かと躓くネイティブプラグイン先が長いです。

期間限定 最大95%オフセール
効率UPメガバンドル開催中!最大95%オフ!!!
期間 : 11月1日午後15時59分まで
オススメ記事
検証環境