質問: CallingConvention.Cdecl)] public static extern int loadImage(string fileName); } ``` ### 試したこと COMの設定が悪いと思ったので CoIntializeEX関数の第2引数を変えてみたり、 C#のMain関数に [STAThread] をつけたり消したりしましたが、 例外が発生したり 例外が発生しなかったものの読み込みができていなかったりしました。 **7/8追記** こちらに**CoInitialize**は不要であるようなことが書かれていたので **CoInitialize**を呼ばずに実行してみましたが、 やはりダメでした。 また、wicImaginigFactoryはNULLではなかったので COM関係では問題ないようですが、 Bitmapデコーダの生成では HRESULTがS_OKでなかったようなのでここで失敗しているようです。
回答: C++の関数をDLLでエクスポートするには、コンパイラーにその旨を教える必要があります。 > > int loadImage(const wchar_t* fileName) > > > この部分を ``` extern "C" __declspec(dllexport) int __stdcall loadImage(const wchar_t* fileName) ``` このようにしてみてください。 C++の関数をDLLにしてC#でDllImportしたい場合は`extern "C"`と`__declspec(dllexport)`は必須です。DEFファイルに書いてリンカーに渡すという方法もありますが、面倒くさいのでお勧めはできません。 また、`__stdcall`を付けると、C#側のDllImport属性`CallingConvention = CallingConvention.Cdecl`が不要になります。