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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top