Frage

Ich versuche, eine C zu bauen ++ / CLI ausführbare Datei, auf die ich statisch ffmpeg verknüpfen (libavcodec, libavformat, libavutil & swscale). Es funktioniert gut, wenn ich es normalerweise (ohne / clr, so dass keine CLR-Unterstützung) zu bauen, es funktioniert. Allerdings, wenn ich CLR Unterstützung hinzufügen, wird es nicht mit einem 0xc000007b starten. Ein "Hallo Welt" C ++ / CLI App läuft gut, aber.

Angeblich soll das gleiche passiert mit boost :: Themen, aber da ffmpeg reine C ist, bezweifle ich, es ist Boost.

Meine config:

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

Danke, Robert

War es hilfreich?

Lösung

Es ist vielleicht nicht verwenden Boost, aber es wahrscheinlich benutzt Threads und lokale Speicher-Thread, der auf das gleiche Problem führt. CLR ist nicht kompatibel mit __declspec (Gewinde). Ich glaube, es gibt keine einfache Behelfslösung, es sei denn, Sie sind bereit, ffmpeg Code zu ändern (wenn Sie sind, diese Schlüsselwörter für Beispiele google: clr, __declspec (Thread)).

Ich schlage vor, ffmpeg in einem anderen Prozess zu isolieren und einige Mittel zur Interprozess-Kommunikation verwendet wird.

Andere Tipps

Ich habe ein ähnliches Problem gesehen, die DirectEditServices beteiligt. Die Lösung endete als den Thread Apartment Typen verwendet. In .Net 2.0 und später die Wohnung Typ Standard-Thread geschaltet von STA zu MTA. Einige native C ++ Objekte nicht MTA unterstützen. Ich hatte Erfolg durch einen Thread Laichen und manuell die Wohnung Typ STA Einstellung. Beachten Sie, dass alle Interprozesskommunikation mit einem nativen C ++ Objekt, das nicht STA unterstützt auf dem STA-Thread auftreten muß, die das Objekt instanziiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top