Domanda

Sto cercando di creare un eseguibile C ++ / CLI al quale collego staticamente ffmpeg (libavcodec, libavformat, libavutil & amp; swscale). Funziona bene se lo costruisco normalmente (senza / clr, quindi nessun supporto CLR), funziona. Tuttavia, quando aggiungo il supporto CLR, non verrà avviato con uno 0xc000007b. A " Hello World " Tuttavia, l'app C ++ / CLI funziona correttamente.

Presumibilmente la stessa cosa accade con Boost :: Threads, ma poiché ffmpeg è puro C, dubito che stia usando Boost.

La mia configurazione:

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

Grazie, Robert

È stato utile?

Soluzione

Potrebbe non utilizzare boost, ma probabilmente utilizza thread e thread di archiviazione locale, il che porta allo stesso problema. CLR non è compatibile con __declspec (thread). Credo che non ci sia una soluzione semplice, a meno che tu non sia disposto a modificare il codice ffmpeg (se lo sei, google quelle parole chiave per esempio: clr, __declspec (thread)).

Suggerisco di isolare ffmpeg in un processo diverso e di utilizzare alcuni mezzi di comunicazione tra processi.

Altri suggerimenti

Ho riscontrato un problema simile che riguardava DirectEditServices. La soluzione è risultata correlata al tipo di Thread Apartment. In .Net 2.0 e versioni successive il tipo di thread apartment predefinito è passato da STA a MTA. Alcuni oggetti C ++ nativi non supportano MTA. Ho avuto successo generando un thread e impostando manualmente il tipo di appartamento su STA. Tenere presente che qualsiasi comunicazione tra processi con un oggetto C ++ nativo che non supporta STA deve avvenire sul thread STA che crea un'istanza dell'oggetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top