1

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

おそらくBoost::Threadsでも同じことが起こりますが、ffmpegは純粋なCであるため、Boostを使用しているとは思えません。

私の設定:

  • Visual Studio 2008 プロフェッショナル SP1
  • Windows XP Pro SP3 (x86)
  • .NET フレームワーク 3.5 SP1

ありがとう、ロバート

4

2 に答える 2

2

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

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

于 2009-08-10T21:04:24.503 に答える
2

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

于 2009-08-28T15:38:12.940 に答える