Charger une dll...

Résolu
ChrOnOs83 Messages postés 32 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 19 juin 2007 - 23 janv. 2006 à 22:57
ChrOnOs83 Messages postés 32 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 19 juin 2007 - 24 janv. 2006 à 10:44
Bonjour à tous,

Cela fait maintenant deux jours que je galère pour pouvoir acceder à une fonction mise dans une dll.
J'ai dabors créé ma dll. Dans mon projet j'ai:
Le fichier CoursDll.cpp:
#include <windows.h>
#include "CoursDll.h"

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return true;
}

extern "C" void WINAPI Initialize()
{
// Write here all the code you need to initialize the DLL
}

extern "C" void WINAPI Release()
{
// Write here all the code you need to free everything ...
}

extern "C" void WINAPI TestFunction()
{
//MessageBox(0,"DLL","",0);
}

Un fichier CoursDll.h:
#ifndef __API_TESTDLL_H
#define __API_TESTDLL_H
#if defined (__cplusplus)
extern "C" {
#endif
// Main API functions declaration
typedef void (WINAPI *DLL_Function_Initialize) ();
typedef void (WINAPI *DLL_Function_Release) ();
typedef void (WINAPI *DLL_Function_TestFunction) ();
#if defined (__cplusplus)
}
#endif
#endif __API_TESTDLL_H

et un fichier CoursDll.Def:
; TestDLL.def : Declares the module parameters for the application
LIBRARY CoursDLL
DESCRIPTION 'Example of DLL'
EXPORTS
; Explicitly exported initialization routine
Initialize @1
Release @2
TestFunction @3

La compilation se passe sans problème.
Esnuite j'ai créér un second projet pour l'executable contenant:
Le fichier main.cpp:
#include <windows.h>

typedef void (WINAPI *DLL_Function_TestFunction)();
DLL_Function_TestFunction pfn_TestFunction;

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HMODULE hDLL;
hDLL = LoadLibrary("CoursDll.dll");
if (hDLL == NULL){
MessageBox(0,"Dll Introuvable","Erreur",0);
}else{
pfn_TestFunction = (DLL_Function_TestFunction)GetProcAddress(hDLL,"TestFunction");
pfn_TestFunction();
FreeLibrary(hDLL);
}
return 0;
}

La compilation ce deroule aussi sans problème.
Ensuite je copie la dll dans le dossier Debug du projet de l'executable.
Lorsque je démarre l'application ca me fait a chaque fois "Exception non gérée à 0x00000000 dans FenetreBase.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000."
J'ai beau chercher je ne trouve pas d'où cela provient...

En ésperant que quelqu'un voit de quoi il sagit, bonne journée/soirée/nuit à tous!
++
ChrOnOs

3 réponses

platon179 Messages postés 237 Date d'inscription lundi 20 mai 2002 Statut Membre Dernière intervention 22 juillet 2011 2
24 janv. 2006 à 09:14
Salut :)



Je sais pas si c'est ca (j'ai pas trop l etemps de vérifier ton code
puis je suis sous Linux :p) mais commence par vérifier que
pfn_TestFunction ne soit pas égal a NULL....



Bonne journée @+
3
ChrOnOs83 Messages postés 32 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 19 juin 2007
24 janv. 2006 à 10:44
Voila mon problème est résolu. J'avai mal déclaré le .def... C'est quand meme dur la vie de noob!:-D
Bref merci à tous ce qui on chercher et particulierement à platon179 et BruNews(pour ces sources)
++
ChrOnOs
3
ChrOnOs83 Messages postés 32 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 19 juin 2007
24 janv. 2006 à 09:47
Je te remerci platon179! En effet pfn_TestFunction est null... Je commence a me demander si j'aurai, un jour, les bon reflexes...:-)
Ca me donne déjà un chemin à suivre.
Bonne journée!!
++
0
Rejoignez-nous