J'essaie d'obtenir un mélange simple entre le C++ managé et le C++ normal. J'utilise Visual Studio 2005 mais continue à rencontrer un problème. Voici ma configuration.Chargement de la DLL C++ managée à partir du programme C++ ordinaire via LoadLibrary
D'abord, j'ai une DLL simple, construit à partir du code
#using "mscorlib.dll"
#include "windows.h"
__declspec(dllexport)
void sayHello()
{
OutputDebugStringA("Hello from managed code!");
}
Je compile cela sur la ligne de commande à une DLL à l'aide
cl /CLR /LD dllcode.cpp
Ensuite, j'ai un programme simple composé de rien de plus que
#include <windows.h>
int main()
{
HINSTANCE lib = LoadLibrary("dllcode.dll");
if (!lib) {
return 1;
}
return 0;
}
Je construis une application de ce en utilisant
cl loader.cpp
Alors je me retrouve avec dllcode.dll
et loader.exe
dans le même répertoire. Lorsque j'essaie de lancer loader.exe
, j'obtiens toujours le code retour '1'. En regardant le code d'erreur produit par GetLastError()
montre que le chargement dllcode.dll
échoué en raison de The specified module could not be found.
Quelqu'un sait pourquoi cela pourrait-il être? Cela a-t-il quelque chose à voir avec les manifestes qui doivent être intégrés dans dllcode.dll
? J'ai exécuté le programme depends sur dllcode.dll mais il n'a pas donné de problèmes autant que je pourrais dire.
Bonne idée; il semble que Filemon a été remplacé par Procmon. En utilisant ce dernier, l'exécution du programme de démonstration a donné lieu à 1076 événements. Malheureusement, je ne pouvais pas voir d'erreurs là-bas - tous les appels LoadImage ont réussi, au moins. Avez-vous une suggestion à faire? –
C'est pourquoi j'utilise toujours FileMon même s'il a été remplacé; Procmon prend plus de travail à mettre en place et il est plus facile de faire des erreurs lors de la configuration des filtres. – jdigital