2009-04-10 22 views
4

OpenCVの機能をアプリケーションに統合しようとしています。現在、DirectShowでコードを設定してカメラからビデオフィードを取得し、MFCウィンドウに表示します。このコードは変更または削除できません。 OpenCVメソッドを呼び出すときにCoInitializeExが失敗するcvLoadImage()

コード

は完全に罰金実行されますが、場所に関係なく、私は次のコード行を配置:

IplImage *img = cvLoadImage("C:/well.jpg"); 

ウェブカメラが正しく初期化に失敗し、プログラムを壊します。私のコードの中でいくつかの点で私は、その後のCoInitializeExを(ヒットはCDialog :: DoModalの()、)を呼び出し、具体的に

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) 

、ひいてはます:

は、より直接的に、私はでFAILED HRESULTを取得しますプログラムは失敗します。

誰でもここで何が起こっているのか知っていますか?

+0

はどのように失敗しますか?エラーコードは何ですか? –

+0

私が見つけたばかりのアップデートを追加しました.cvLoadImageがどこにあるかに関係なく、CDialog :: DoModalを呼び出すとコードが失敗します – linusthe3rd

答えて

4
あなたを引き起こして、以前のCoInitializeEx(NULL、COINIT_MULTITHREADED)

私はOpenCVのは、のCoInitializeEx(NULL、COINIT_MULTITHREADED)を呼び出すことを推測があった場合は、スレッドが以前、すなわち、異なるアパート、として初期化された場合のCoInitializeは失敗します

その後のCoInitializeExの呼び出しは失敗します。この場合、CoInitializeExの戻り値を確認することで確認できます。この場合、RPC_E_CHANGED_MODEになります。

直接的な修正はありませんが、最も簡単なのは、OpenCV呼び出しを別のスレッドに移動することです。

1

マイケルは外部依存DLLのチェックに加えて、CoInitializeも見つからない場合にも失敗することに加えて、

0

私は同様の問題がありました。私のMFCアプリでAfxOleInitへの呼び出しはRPC_E_CHANGED_MODEで失敗しました。

私は失敗を無視できません(私はアプリケーションの中でCOMが必要です)、私は別のスレッドにOpenCV呼び出しを移すことはできません。

が、私は私の問題を解決したスレッド"wxwidgets and opencv 1.1 ole initialization error"を見つけました:_highgui.hに行く私はOpenCVのからのビデオ入力のサポートを必要としないとhttp://tech.dir.groups.yahoo.com/group/OpenCV/message/60060

で提案されているように、私は#define HAVE_VIDEOINPUT 1を削除することができ、コメント行96(」 #define HAVE_VIDEOINPUT 1「) とそれはOpenCV_1.1pre1aで動作します

を再コンパイルします。

関連する問題