OpenCvSharp で64ビット用のOpenCVを用いると TypeInitializationException が発生する

OpenCvSharpでOpenCVのx64(64ビット)用のDLLを用いるとTypeInitializationException例外が発生することがあります。

概要

TypeInitializationException例外が発生し

'OpenCvSharp.NativeMethods' のタイプ初期化子が例外をスローしました。

の追加情報が表示されます。

OpenCvSharp で64ビット用のOpenCVを用いると TypeInitializationException が発生する:画像1

原因

WindowsFormアプリやコンソールアプリのアプリケーションのデフォルトの設定では32ビットを優先して利用する動作になっています。このためビルドされたアプリケーションは32ビットアプリケーションとして実行されます。そのため32ビットアプリから64ビットのOpenCVのDLLを読み込もうとしてエラーになるようです。

対策

ソリューションエクスプローラでプロジェクトのノードを選択し、右クリックのポップアップメニューの[プロパティ]を選択しプロジェクトの設定画面を表示します。設定画面の左側のカテゴリメニューから[ビルド]をクリックして選択します。(下図)
OpenCvSharp で64ビット用のOpenCVを用いると TypeInitializationException が発生する:画像2

対策は以下の2つの方法があります。

32ビット優先を外す

デフォルトでは[32 ビットの優先]チェックボックスにチェックがついていますので、このチェックボックスのチェックを外します。
OpenCvSharp で64ビット用のOpenCVを用いると TypeInitializationException が発生する:画像3

64ビットを明示的に指定する

プラットフォームターゲットのコンボボックスはデフォルトでは"Any CPU"が選択されています。これを"x64"に変更します。
OpenCvSharp で64ビット用のOpenCVを用いると TypeInitializationException が発生する:画像4



上記設定の変更によりTypeInitializationException例外の発生は解消します。

補足 (その他の原因)

OpenCVのDLLを出力ディレクトリにコピーせず、OpenCVのDLLが見つからない場合も同様のエラーが発生します。この原因の場合はDLLが32ビット版でも発生します。ソリューションエクスプローラでDLLファイルのプロパティ[出力ディレクトリにコピー]を"コピーしない"から"常にコピーする"または"新しい場合はコピーする"に変更します。

OpenCvSharp で64ビット用のOpenCVを用いると TypeInitializationException が発生する:画像5

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2014-04-08
Copyright © 1995–2025 iPentec all rights reserverd.