LoadLibrary 193
Estou criando uma DLL C ++ / CLI que será carregada em um aplicativo c ++ herdado. O aplicativo legado faz isso com uma chamada tradicional para LoadLibrary. O aplicativo e a DLL C ++ / CLI são compilados no modo de 64 bit
Quando a chamada LoadLibrary acontece, ela falha com o erro 193. Isso geralmente significa que algum componente não de 64 bits está tentando carregar. Quando olho para a saída de carregamento da dll no visual studio 2010, vejo que a falha está ocorrendo quando o mscoree.dll está sendo carregado (para ser exato, vejo minha dll carregada, depois mscoree carregada, depois mscoree descarregada e a minha dll descarregada , o erro retornou). Especificamente, C: \ Windows \ System32 \ mscoree.dll está sendo carregado. Quando examino este mscoree.dll, percebo que ele está direcionado para I386.
Como posso garantir que meu aplicativo seja vinculado ao mscoree.dll correto? Entendo que isso poderia ser feito com um manifesto, mas não consigo encontrar nenhuma informação boa sobre como configurá-lo. A solução ideal permitiria a compilação no modo de 32 bits ou 64 bits e atingiria o mscoree.dll corret
Como uma observação lateral, encontrei um mscoree.dll em uma pasta lado a lado que verifiquei no modo de 64 bits e copiei-o no diretório de aplicativos com a esperança de que ele pegasse esse primeiro. Isso não funcionou e a versão C: \ Windows \ System32 ainda estava carregad
Obrigado
Max
Saída do CorFlags.exe na dll C ++ / CLIMicrosoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v4.0.30319
CLR Header: 2.5
PE : PE32+
CorFlags : 16
ILONLY : 0
32BIT : 0
Signed : 0
Saída do pedump.exe em C: \ System32 \ mscoree.dllPS C:\Windows\System32> pedump.exe .\mscoree.dll
Dump of file .\MSCOREE.DLL
File Header
Machine: 014C (I386)
Number of Sections: 0004
TimeDateStamp: 4B90752B -> Thu Mar 04 22:06:19 2010
PointerToSymbolTable: 00000000
NumberOfSymbols: 00000000
SizeOfOptionalHeader: 00E0
Characteristics: 2102
EXECUTABLE_IMAGE
32BIT_MACHINE
DLL
...
(o pedump continua daqui para descrever as importações e exportações, mas isso não é importante aqui)
Informações de carregamento estendidasEsta é a saída completa do carregamento com falh
Nota: A DLL C ++ / CLI é chamada DsfClr.dll
a saída foi obtida executando gflags.exe -i [nome]] + sls e examinando os resultados em um depurador
Usando uma dica postada em um comentário abaixo de Reuben, eu pude determinar que o mscoree.dll está realmente mirando no AMD64, mas o pedump está fornecendo informações inválidas porque está sendo executado no WOW64. Dito isto, ainda não consigo carregar esta biblioteca, se alguém tiver alguma sugestão, seria muito apreciada.
Mais uma coisa que tentei: criei um novo aplicativo C # e referenciei a DLL C ++ / CLI; em seguida, na função main (), instanciei uma classe na DLL C ++ / CLI. Isso causou uma exceção de violação de acesso antes da função main () ser chamada. Quando removo a instanciação, a função principal funciona bem. Meu palpite é que a instanciação está causando um atraso no carregamento do meu assembly C ++ / CLI, o que causa o mesmo erro de carregamento que eu estava vendo no assembly nativ