質問

ffmpeg(libavcodec、libavformat、libavutil& swscale)を静的にリンクするC ++ / CLI実行可能ファイルをビルドしようとしています。 (/ clrがなく、CLRがサポートされていない)正常にビルドすると正常に動作します。ただし、CLRサポートを追加すると、0xc000007bで起動しません。 「Hello World」ただし、C ++ / CLIアプリは正常に動作します。

Boost :: Threadsでも同じことが起こりますが、ffmpegは純粋なCなので、Boostを使用しているのではないかと思います。

私の設定:

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

ありがとう、 ロバート

役に立ちましたか?

解決

ブーストを使用しない場合もありますが、おそらくスレッドとスレッドローカルストレージを使用するため、同じ問題が発生します。 CLRは__declspec(thread)と互換性がありません。 ffmpegコードを変更する場合を除き、簡単な回避策はないと思います(例:clr、__ declspec(thread)のキーワードをGoogleで検索してください)。

別のプロセスでffmpegを分離し、プロセス間通信の手段を使用することをお勧めします。

他のヒント

DirectEditServicesに関連する同様の問題を見てきました。ソリューションは、スレッドアパートメントタイプに関連することになりました。 .Net 2.0以降では、デフォルトのスレッドアパートメントタイプがSTAからMTAに切り替わりました。一部のネイティブC ++オブジェクトはMTAをサポートしていません。スレッドを生成し、アパートメントタイプを手動でSTAに設定することで成功しました。 STAをサポートしないネイティブC ++オブジェクトとのプロセス間通信は、オブジェクトをインスタンス化するSTAスレッドで発生する必要があることに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top