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

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

原因は iOS 用のコード

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

問題のコード

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate void CallbackDelegate([MarshalAs(UnmanagedType.I4)] Int32 result);
[DllImport("__Internal", EntryPoint = "registerAuthCallback")]
static extern void RegisterAuthCallback([MarshalAs(UnmanagedType.FunctionPtr)] CallbackDelegate callback);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate void CallbackDelegate([MarshalAs(UnmanagedType.I4)] Int32 result); [DllImport("__Internal", EntryPoint = "registerAuthCallback")] static extern void RegisterAuthCallback([MarshalAs(UnmanagedType.FunctionPtr)] CallbackDelegate callback);
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    delegate void CallbackDelegate([MarshalAs(UnmanagedType.I4)] Int32 result);
    
    [DllImport("__Internal", EntryPoint = "registerAuthCallback")]
    static extern void RegisterAuthCallback([MarshalAs(UnmanagedType.FunctionPtr)] CallbackDelegate callback);

修正後

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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
#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
#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