C ++ / CLI - opção 0xc000007b (INVALID_IMAGE_FORMAT) com / clr em
-
22-07-2019 - |
Pergunta
Eu estou tentando construir um C ++ / CLI executável para o qual eu estaticamente ligação ffmpeg (libavcodec, libavformat, libavutil & swscale). Ele funciona muito bem se eu construí-lo normalmente (sem / clr, então nenhum suporte CLR), ele funciona. No entanto, quando eu adicionar suporte CLR, ele não irá iniciar-se com uma 0xc000007b. A "Olá Mundo" C ++ / app CLI funciona muito bem, no entanto.
Supostamente a mesma coisa acontece com boost :: Threads, mas desde ffmpeg é puro C, duvido que seja usando Boost.
Meu config:
- Visual Studio 2008 Professional SP1
- Windows XP Pro SP3 (x86)
- .NET Framework 3.5 SP1
Obrigado, Robert
Solução
Pode não usar impulso, mas provavelmente usa tópicos e linha de armazenamento local, o que leva ao mesmo problema. CLR não é compatível com __declspec (thread). Eu acredito que não há nenhuma solução alternativa simples, a menos que você está disposto a modificar o código ffmpeg (se você está, o Google as palavras-chave para exemplos: clr, __declspec (thread)).
Eu sugiro isolar ffmpeg em um processo diferente e usando alguns meios de comunicação entre processos.
Outras dicas
Eu vi um problema semelhante que DirectEditServices envolvidos. A solução acabou sendo relacionada com o tipo Thread Apartment. Na Net 2.0 e mais tarde o fio padrão tipo de apartamento mudado de STA para MTA. objetos alguns C ++ nativo não suportam MTA. Eu tive sucesso, gerando uma linha e definir manualmente o tipo de apartamento para STA. Tenha em mente que qualquer comunicação entre processos com C ++ nativo objeto que não suporta STA deve ocorrer no thread STA que instancia o objeto.