*******************UseDll1.cpp*********************
#include <windows.h>
typedef int (*function1_ptr) ();
function1_ptr function1=NULL;
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
HMODULE myDll = LoadLibrary("Dll1.dll");
if(myDll!=NULL) {
function1 = (function1_ptr) GetProcAddress(myDll,"function1");
if(function1!=NULL)
function1();
else
exit(4);
FreeLibrary(myDll);
}
else
exit(6);
return 0;
}
This is done in order to call Dll1.dll which was created with the functionality to send mail to my own mail server. The above code runs and exits,and no mail is sent. And i also placed the Dll1.dll in the same folder as UseDll1.EDIT:
I added the Dll1.dll into the system32 folder.
7 Réponses :
Juste parce que le code fonctionne et les sorties ne signifie pas que c'est juste! Êtes-vous sûr que: p>
Vous devez parcourir le code dans un débogueur pour vous assurer que tout cela se passe et que le code accède à
mydll retourne null ... Comment puis-je le réparer .. ?? J'ai la DLL dans le même dossier que l'endroit où ce code est exécuté
Je suppose que vous n'exécutez pas votre application à partir de System32, alors retirez simplement le chemin de l'appel à LoadLibrary afin qu'il lit LoadLibrary ("dll1.dll") et voyez ce qui se passe ...
Pourquoi ne pas le déboguer et voir où il échoue? Assurez-vous que votre DLL est en cours de chargement (cela pourrait simplement être un problème de chemin ou une mauvaise dll (vous n'avez peut-être pas importé / exporté les fonctions). P>
Découvrez d'abord le problème. C'est soit en chargement de la DLL, appelant la fonction ou à l'intérieur de la fonction p>
Avez-vous vérifier que vous avez toutes les dépendances externes pour "dll1.dll"? p>
LoadLibrary échouera même si l'une des bibliothèques liées indirecte n'est pas disponible. P>
Merci beaucoup, votre page Web m'a beaucoup aidé :) Je n'ai eu qu'à utiliser Tchar.h pour le faire fonctionner. Vous pouvez le voir dans le reste de la réponse.
#pragma once
#include <windows.h>
#include "spinapi.h"
#include <tchar.h>
typedef int (*count_boards_ptr)(void);
int x = 0;
HINSTANCE hinstDLL;
hinstDLL = LoadLibrary(_T("C:\\Smajdalf\\doucko_C\\DLLProblem\\DLLProblem\\spinapi.dll"));
count_boards_ptr count_boards = NULL;
count_boards = (count_boards_ptr) GetProcAddress(hinstDLL, "pb_count_boards");
if(count_boards != NULL) {
x = count_boards();
}
FreeLibrary(hinstDLL);
Quelle page Web voulez-vous dire? Je ne semble pas trouver une URL que vous parlez de.
Dans mon expérience d'appel de la DLL, j'ai eu le même problème. J'ai tout fait pour avoir donné le chemin à juste titre, mais ma bibliothèque ne peut pas être chargée. Tout d'abord, je pensais que ma DLL avait une erreur, mais rien n'a résolu mon problème au début. Je conseille en dessous de l'étape pour les amis qui pensent leur projet écrit à juste titre, mais toujours avoir le même problème: P>
Après avoir construit le projet avec la bonne configuration, il fonctionne maintenant. P>
Je pense que vous avez déjà vérifié l'existence de DLL. P>
Essayez maintenant ceci :: p>
Essayez de changer "Toute CPU" à 86 ou 64. P>
Essayez d'exécuter votre application en tant qu'administrateur. P>
J'ai eu le même problème. Ce lien le résolu. La question était que je n'utilisais pas la macro. P>
Ne le mettez pas dans le système32. Ce n'est pas supposé aller là-bas et vous passez simplement autour sans résoudre le problème réel.
J'ai lu sur Internet dans lequel ils disent qu'il y a de chances que la DLL ne soit pas capable de se charger car elle a également certaines dépendances, mais dans ce cas, la fonction1 rendrait Null..wht dire ??
Si la variable mydll n'est pas nulle mais GetProcAddress renvoie NULL, vérifiez si la DLL exporte la fonction requise. Prenez note de "Nom Mangling" si vous exportez comme C ++