Pergunta

Estou tendo um C # (.NET 3.5, VS2005 Professional) aplicativo que usa não gerenciado de biblioteca de 32 bits escrito em C / C ++. API que eu uso é assim:

void * Inicializar (int x);

GetData voic (void *);

e isso funciona quando eu executá-lo em 32 bits do Windows XP, mas no Windows XP64bit ele lança exceção:

Exceção não tratada: System.Reflection.TargetInvocationException: exceção foi acionada pelo destino de uma chamada. ---> System.BadImageFormatException: Foi feita uma tentativa de carregar um programa com um formato incorreto. (Exceção de HRESULT: 0x8007000B) em Aktuelizator.CommonLibrary.InitializeRingBuffer (Int32 fraca) em Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor ()

trabalho Essas DLL não gerenciado sob 64bit XP quando chamado a partir de 32 bits unmanages writetn aplicação em C / C ++.

Alguém tem alguma idéia?

Foi útil?

Solução

A sua configuração construir a plataforma é definido como 'Qualquer CPU', isso significa que em um sistema operacional de 64 bits é executado como de 64 bits e você não pode carregar a DLL. Defini-lo em vez de x86, isso vai forçá-lo para ser executado como de 32 bits, independentemente do sistema operacional e sua DLL carregará bem.

Outras dicas

Parece que sua DLL só é compilado para 32 bits, mas você tentar chamá-lo tanto de um processo de 32 bits e 64 bits. O ex-obra vontade, é claro. Quanto mais tarde, no entanto, não vai. 32 bit DLLs só pode ser utilizado em processos de 32 bits. Tente compilar a DLL para um alvo de 64 bits e deixe o uso C # aplicativo que um.

Verifique todos os parâmetros que são definidos como Int32, que deve de fato ser IntPtr.

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