Question

J'essaie de créer un exécutable C ++ / CLI auquel je lie statiquement ffmpeg (libavcodec, libavformat, libavutil & swscale). Cela fonctionne bien si je le construit normalement (sans / clr, donc pas de support CLR), ça marche. Cependant, lorsque j'ajoute le support CLR, il ne démarre pas avec un 0xc000007b. Un "Hello World" L'application C ++ / CLI fonctionne correctement, cependant.

Semblablement, la même chose se produit avec Boost :: Threads, mais comme ffmpeg est du pur C, je doute qu’il utilise Boost.

Ma configuration:

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

Merci, Robert

Était-ce utile?

La solution

Il n’est peut-être pas utilisé de boost, mais il utilise probablement des threads et le stockage local des threads, ce qui pose le même problème. CLR n'est pas compatible avec __declspec (thread). Je crois qu’il n’existe pas de solution simple, à moins que vous ne souhaitiez modifier le code ffmpeg (si vous le souhaitez, recherchez ces mots clés dans Google: CLR, __declspec (thread)).

Je suggère d’isoler ffmpeg dans un processus différent et d’utiliser un moyen de communication interprocessus.

Autres conseils

J'ai constaté un problème similaire impliquant DirectEditServices. La solution a fini par être liée au type Thread Apartment. Dans .Net 2.0 et versions ultérieures, le type d'appartement de thread par défaut est passé de STA à MTA. Certains objets C ++ natifs ne prennent pas en charge MTA. J'ai réussi à créer un thread et à définir manuellement le type d'appartement sur STA. N'oubliez pas que toute communication interprocessus avec un objet C ++ natif qui ne prend pas en charge STA doit avoir lieu sur le thread STA qui instancie l'objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top