begin process at 2012 05 30 10:30:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

Utilisation DLL dynamique / getprocAddress null


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Utilisation DLL dynamique / getprocAddress null

mercredi 8 juin 2011 à 09:41:25 | Utilisation DLL dynamique / getprocAddress null

Inutqen

Bonjour à tous !

J'essaye d'utiliser une DLL fournie sans .lib, mais avec un beau .h, du coup je tente la combo LoadLibrary et GetProcAddress. Le problème c'est que GetProcAddress me renvoi NULL tout le temps.

Je suis sous windows (XP 64 bits) et je développe avec VS 2008 (que je maîtrise mal).

Vla mon code :
Ma dll s'appelle MADLL.dll et son header associé MADLL.h.
Les fonctions dans le header de la DLL sont déclarées en extern "C" :

Code C/C++ :
MADLL.H

extern "C"
{
    __declspec(dllexport) MonTypeDeRetour __stdcall MADLL_MaFonction();

    ...
}


Code C/C++ :
MAIN.H

#include <iostream>;
#include <stdio.h>
#include <windows.h>

#include "MADLL.h"

...


Code C/C++ :
MAIN.CPP

#include "main.h"

using namespace std;

int main()
{

	typedef UINT (__stdcall* MYDLLFUNC)(DWORD,UINT);
	HINSTANCE hDLL;
	MYDLLFUNC ImpFuncDLL;

	hDLL = LoadLibrary(L"MADLL");
	if (hDLL != NULL)
	{
		ImpFuncDLL = (MYDLLFUNC)GetProcAddress(hDLL, "MADLL_MaFonction");

		if (!ImpFuncDLL)
		{
			cout<<"error"<<endl;
		        FreeLibrary(hDLL);       
		        return 1;
		}
		else
                ...


L&#8217;exécution m'affiche toujours 'error', donc GetProcAddress renvoie NULL.

J'ai pas mal tourné sur le net pour trouver une réponse mais je bloque toujours...

La DLL se load puisqu'on rentre dans le if, donc je vais mal chercher les fonctions... Est-ce qu'il faut que je colle un __declspec(dllimport) quelque part ?

Help !

Merci :)
mercredi 8 juin 2011 à 10:18:20 | Re : Utilisation DLL dynamique / getprocAddress null

BruNews

Administrateur CodeS-SourceS
Controle deja avec depends.exe (dispo sur le net) que la DLL exporte bien ta fonction.

ciao...
BruNews, MVP VC++
mercredi 8 juin 2011 à 10:28:38 | Re : Utilisation DLL dynamique / getprocAddress null

Inutqen

WoW !

ça c'est de l'aide qui poutre.

En effet les noms des fonctions sont suivis d'un "@X", X étant un nombre.

Merci beaucoup BruNews !

Pour info, ça vient d'où cet @ ?
mercredi 8 juin 2011 à 10:35:46 | Re : Utilisation DLL dynamique / getprocAddress null

BruNews

Administrateur CodeS-SourceS
X est le nombre d'octets des parametres, jusque là donc tout va bon.

ciao...
BruNews, MVP VC++
mercredi 8 juin 2011 à 10:38:41 | Re : Utilisation DLL dynamique / getprocAddress null

BruNews

Administrateur CodeS-SourceS
Attention aussi, tu mets que h precise que dll exporte:
MonTypeDeRetour __stdcall MADLL_MaFonction();
0 param.

mais dans ton code on voit:
typedef UINT (__stdcall* MYDLLFUNC)(DWORD,UINT);.
avec 2 params !!!

ciao...
BruNews, MVP VC++
mercredi 8 juin 2011 à 10:45:58 | Re : Utilisation DLL dynamique / getprocAddress null

Inutqen

Yep yep, j'avais pas complété les paramètres de MADLL_MaFonction

Encore merci
mercredi 8 juin 2011 à 11:16:47 | Re : Utilisation DLL dynamique / getprocAddress null

Inutqen

Fausse joie. Il s'avère que ça ne résout pas mon problème.

Code C/C++ :
MAIN.CPP

#include "main.h"

using namespace std;

int main()
{

	typedef int (__stdcall* MYDLLFUNC)(const char*);
        HINSTANCE hDLL;
	MYDLLFUNC ImpFuncDLL;
	int res;

	hDLL = LoadLibrary(L"MADLL");
	if (hDLL != NULL)
	{
		
		ImpFuncDLL = (MYDLLFUNC)GetProcAddress(hDLL,
			"Mafonction@4");
		if (!ImpFuncDLL)
		{
			cout<<"error"<<endl;
		        FreeLibrary(hDLL);       
		        return 1;
		}
		else
		{
	                res = ImpFuncDLL("blob");
		        FreeLibrary(hDLL);
                        return 0;
		}
	}
}


Avec
Code C/C++ :
MADLL.H

extern "C"
{
    __declspec(dllexport) int __stdcall MaFonction(const char* name);
    ...
}



Et ça m'affiche error...
mercredi 8 juin 2011 à 11:18:52 | Re : Utilisation DLL dynamique / getprocAddress null

Inutqen

Il faut lire : ImpFuncDLL = (MYDLLFUNC)GetProcAddress(hDLL, "MaFonction@4");
mercredi 8 juin 2011 à 12:27:49 | Re : Utilisation DLL dynamique / getprocAddress null

BruNews

Administrateur CodeS-SourceS
_MaFonction@4
est le nom "décoré" standard, à GetProcAddress() c'est le nom SANS déco qu'on passe, 'MaFonction' ici.

ciao...
BruNews, MVP VC++
mercredi 8 juin 2011 à 12:48:00 | Re : Utilisation DLL dynamique / getprocAddress null

Inutqen

Bah c'est ce que je faisais avant (voir mon 1° post).

Du coup c'est pas ça le problème. Je sèche toujours...

Une autre idée ?

1 2 3

Cette discussion est classée dans : code, dll, include, madll, getprocaddress


Répondre à ce message

Sujets en rapport avec ce message

Utilisation DLL SANS .lib [ par nasedo47 ] J'ai récupéré une DLL sur un site ainsi qu'une page avec les prototypes de toutes les fonctions contenues dans cette DLL.J'aimerais utiliser ces fonct exemple de creation et utilisation d'un simple dll . [ par bonapart002 ] Bonjour:je suis débutant en c++ .je travail  avec Borland C++ 5.01.je veux créer une dll puis l'utiliser dans un programme .pour cela j'ai crée  un pr Impossible d'obtenir l'adresse d'une function contenus dans une DLL [ par Nementon ] Bonjours, Voila le code simple d'une DLL et de son exécutable, compilé sous Visual 2008 et qui pour de sombres raisons plante lamentablement, lorsqu .dll [ par dhahrikhedher ] comment ajouté un dll[code=cpp][/code]avec visual studio fonction dans dll qui fait planter programme [ par pitch069 ] Bonjour,je travail actuellement sur un code C++, sous dev c++. j'utilise une dll au travers d'un *.lib et dans mon programme principal je fais appel a [ffmpeg / C++] Problème de linkage [ par jeje6_3 ] Bonsoir, Je souhaite utiliser la lib ffmpeg dans une application C++ avec MSYS/MinGW, dont voici le code : [code=cpp]#include #include #include appeler une fonction c++ contenu dans dll avec de code c++ [ par avg ] j'ai une fonction qui est sous une class dans un dll déclarer comme ce ci : [code=cpp]C_MORPHO_User::C_MORPHO_User()[/code] j'ai appeler dll avec Load Trouver les pixel de couleur noir [ par blastrame ] Bonsoir j'aurais beosin de votre aide car je bloques :( Je souhaiterais a mon code pouvoir compter le nombre de pixel de couleur noir de l'image en oc utilisé string dans une dll c++ [ par avg ] Bonjour à tous j'ai un problème avec la création d'une dll avec c++ pour créer les fonctions à exporté de dll si son type de retour est int ou void le Code C : resolveur de meistermind probleme [ par kinder87000 ] Salut à tous, Voila mon problème j'ai essayer de faire un résolveur de meistermind mais je ne sais pas comment associer des couleurs à des chiffres e


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales