2009-08-05 13 views
1

私は静的にffmpeg(libavcodec、libavformat、libavutil & swscale)をリンクするC++/CLI実行ファイルをビルドしようとしています。私はそれを正常に(clrなしで、CLRサポートなしで)ビルドすればうまく動作しますが、動作します。ただし、CLRサポートを追加すると、0xc000007bで起動しません。しかし、 "Hello World" C++/CLIアプリケーションは正常に動作します。/clrオプション付きの0xc000007b(INVALID_IMAGE_FORMAT)

おそらくBoost :: Threadsでも同じことが起こりますが、ffmpegは純粋なCなので、Boostを使用しているかどうかは疑問です。

マイ設定:

  • のVisual Studio 2008 ProfessionalのSP1
  • のWindows XP ProのSP3(x86の)
  • の.NET Framework 3.5 SP1

おかげで、 ロバート

答えて

2

それはブーストを使用しないかもしれませんが、おそらくスレッドとスレッドローカルストレージを使用します。同じ問題を引き起こします。 CLRは__declspec(スレッド)と互換性がありません。私はあなたがffmpegコードを修正するつもりがない限り、簡単な回避策はないと信じています(例えば、clr、__declspec(スレッド)のようなキーワードをgoogleに追加してください)。

私は別のプロセスで、プロセス間通信のいくつかの手段を使ってffmpegを分離することをお勧めします。

+0

ありがとうございます - 私はそれを動的にリンクしても動作するようですが、別のプロセスがメモリリークなどを防ぐためのより良いオプションになるかもしれません。 –

2

DirectEditServicesに関連する同様の問題があります。解決策は結局のところスレッドアパートタイプに関連していました。 .Net 2.0以降では、デフォルトのスレッドアパートメントタイプがSTAからMTAに切り替えられました。一部のネイティブC++オブジェクトは、MTAをサポートしていません。スレッドを作成し、アパートメントタイプを手動でSTAに設定することで成功しました。 STAをサポートしていないネイティブC++オブジェクトとのプロセス間通信は、そのオブジェクトをインスタンス化するSTAスレッドで発生する必要があります。

関連する問題