Charger une dll... [Résolu]

Messages postés
32
Date d'inscription
mercredi 20 août 2003
Dernière intervention
19 juin 2007
- 23 janv. 2006 à 22:57 - Dernière réponse :
Messages postés
32
Date d'inscription
mercredi 20 août 2003
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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
237
Date d'inscription
lundi 20 mai 2002
Dernière intervention
22 juillet 2011
- 24 janv. 2006 à 09:14
3
Merci
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 @+

Merci platon179 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de platon179
Meilleure réponse
Messages postés
32
Date d'inscription
mercredi 20 août 2003
Dernière intervention
19 juin 2007
- 24 janv. 2006 à 10:44
3
Merci
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

Merci ChrOnOs83 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de ChrOnOs83
Messages postés
32
Date d'inscription
mercredi 20 août 2003
Dernière intervention
19 juin 2007
- 24 janv. 2006 à 09:47
0
Merci
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!!
++
Commenter la réponse de ChrOnOs83

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.