OpenCvSharpでOpenCVのx64(64ビット)用のDLLを用いるとTypeInitializationException例外が発生することがあります。
概要
TypeInitializationException例外が発生し
'OpenCvSharp.NativeMethods' のタイプ初期化子が例外をスローしました。
の追加情報が表示されます。
原因
WindowsFormアプリやコンソールアプリのアプリケーションのデフォルトの設定では32ビットを優先して利用する動作になっています。このためビルドされたアプリケーションは32ビットアプリケーションとして実行されます。そのため32ビットアプリから64ビットのOpenCVのDLLを読み込もうとしてエラーになるようです。
対策
ソリューションエクスプローラでプロジェクトのノードを選択し、右クリックのポップアップメニューの[プロパティ]を選択しプロジェクトの設定画面を表示します。設定画面の左側のカテゴリメニューから[ビルド]をクリックして選択します。(下図)
対策は以下の2つの方法があります。
32ビット優先を外す
デフォルトでは[32 ビットの優先]チェックボックスにチェックがついていますので、このチェックボックスのチェックを外します。
64ビットを明示的に指定する
プラットフォームターゲットのコンボボックスはデフォルトでは"Any CPU"が選択されています。これを"x64"に変更します。
上記設定の変更によりTypeInitializationException例外の発生は解消します。
補足 (その他の原因)
OpenCVのDLLを出力ディレクトリにコピーせず、OpenCVのDLLが見つからない場合も同様のエラーが発生します。この原因の場合はDLLが32ビット版でも発生します。ソリューションエクスプローラでDLLファイルのプロパティ[出力ディレクトリにコピー]を"コピーしない"から"常にコピーする"または"新しい場合はコピーする"に変更します。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2014-04-08