código não gerenciado dll
-
09-09-2019 - |
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?
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.