[unity] ビルドエラー: Building Library\Bee\..\GameAssembly.dll failed with output

Windows でビルドしたところ、このような見慣れないエラーに遭遇しました。
その時問題だった部分について知見を共有します。

原因は iOS 用のコード

C# から iOS のみで使うコードの呼び出しには、#if UNITY_IOS ~ #endif で囲むのが通例ですが、extern の箇所もつけておく必要があるんでした……。

問題のコード

    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    delegate void CallbackDelegate([MarshalAs(UnmanagedType.I4)] Int32 result);
    
    [DllImport("__Internal", EntryPoint = "registerAuthCallback")]
    static extern void RegisterAuthCallback([MarshalAs(UnmanagedType.FunctionPtr)] CallbackDelegate callback);

修正後

#if UNITY_IOS
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    delegate void CallbackDelegate([MarshalAs(UnmanagedType.I4)] Int32 result);
    
    [DllImport("__Internal", EntryPoint = "registerAuthCallback")]
    static extern void RegisterAuthCallback([MarshalAs(UnmanagedType.FunctionPtr)] CallbackDelegate callback);
#endif

修正後、無事にビルドすることができました。

iOS に限らず、一部のネイティブコードはきちんと #if ディレクティブで対処しないと他のビルドに影響をきたしますね。注意しましょう!

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA