Pb DLL

Signaler
Messages postés
48
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
6 octobre 2005
-
Messages postés
48
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
6 octobre 2005
-
Bonjour,

J'ai créer une DLL qui doit retourner plusieurs paramètres au pg appelant. cela fait plusieurs jour que j'essai de la tester, je voulais faire un programme qui faisait appel à la DLL, je me suis inspirée de plusieurs tutoriaus, masi je n'y arrive pas.
après plusieurs jours d'essais et àforce de faire des essais, je suis complètement perdue.
Je commence à m'énervée car la DLL devrait déjà être finie!!

si quelqu'un pouvait m'aider...

Merci beaucoup.

10 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Dis où tu bloques précisément sinon difficile de t'aider.
Il y a de nombreux exemples de DLLs en sources sur cppfrance, ça devrait t'inspirer.
Passe un pointeur de structure à ta DLL pour de nombreux paramètres modifiables.

ciao...
BruNews, MVP VC++
Messages postés
48
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
6 octobre 2005

Voici comment j'ai créer ma DLL (car je ne sais pas si c'est vraiment exacte):

#import "C:\Program Files\Fichiers communs\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")
#include "ADOLib.h"
#include <windows.h>
#include "IMU_DLL.h"
//#include "IMU_DLL.h"
//#include <D:\marielle\IMU_DLL\IMU_DLL.def>CString sProvider= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\BdD.mdb;Mode=ReadWrite;Persist Security Info=False";
#include "stdafx.h"

//Fonction 1
extern "C"__declspec(dllexport) WINAPI IMU_connect(CString* etat, CString* defaut))
{....}

Et voici comment je voulais l'appeler:
#include <windows.h>
#include "StdAfx.h"
#include "Cpp1.h"


int main(void)
{
CString* setat =new CString;
CString* sdefaut =new CString;

HMODULE hDLL = LoadLibrary("D:\\marielle\\IMUDLL2\\IMU_DLL.dll");
if(!hDLL)
{
MessageBox(NULL, "Impossible de chargée la DLL...", "Erreur", MB_ICONERROR);
printf("erreur");
return 0;
}
DLL_Function_Imu_connect ptr_IMU;


ptr_IMU = (DLL_Function_Imu_connect)GetProcAddress(hDLL, "IMU_connect");
if (!ptr_IMU)
{//erreur
MessageBox(NULL, "erreur los de l'allouage...","erreur", MB_ICONERROR);
FreeLibrary(hDLL);
}
ptr_IMU(CString& etat, CSring& defaut);
//Et on libère la DLL*/
cout<<*setat;
cout<<*sdefaut;
FreeLibrary(hDLL);
return 0;
}
avec Cpp1.h:
#ifdef __IMU_DLL_H
#define __IMU_DLL_H
#include<Windows.h>


#if defined(__cplusplus)
extern "C"{
#endif


typdef void (WINAPI *DLL_Function_Imu_connect) (CString *setat, CString *defaut);


#if defined (_cplusplus)
}
#endif


#endif __IMU_DLL_

et j'ai pal mal d'erreur, comme quoi, il ne reconnait aps la fonction Imu_connect et le pointeur de fonction

Merci pour votre aide!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Vérif que tu as bien mis le .lib de Imu_connect() au linker.

ciao...
BruNews, MVP VC++
Messages postés
48
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
6 octobre 2005

C'est à dire qu'il faut que je rajoute le .lib de ma DLL dans Project->Setting et pour le debug et le release? je vais esayer
désolée, mais je suis une vraie débutante!
sinon est-ce que le reste est bon (emploi du pointeur et du GetProcAddress...)

merci beaucoup de m'aider
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Si tu as le h et le lib au linker, il faudra enlever LoadLibrary et GetProcAddress, c'est liaison statique OU dynamique mais pas les 2.
Opte pour le lib au linker (statique), plus simple à gérer et le système annonce direct si DLL non trouvée au lancement du prog.

ciao...
BruNews, MVP VC++
Messages postés
48
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
6 octobre 2005

d'accord, je vais essyer ...
mais si je n'utilise pas le LoadLibrary et getprocAddress, je dois faire comment pour tester ma DLL, pour l'appeler et récupérer les valeurs de retour.

Merci de consacrer un peu de temps à mon problème car j'en ai vraiment besoin!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
normal, appelle la fonction déclarée dans le h.

ciao...
BruNews, MVP VC++
Messages postés
48
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
6 octobre 2005

Il ne me reconnait toujours pas ma fonction.


(Pour être sûr de ce que je fais), ma DLL contient une fonction IMU_connect qui retourne deux paramètre et que j'ai déclaré comme suit:
extern "C"__declspec(dllexport) WINAPI IMU_connect(CString* etat, CString* defaut))
{....}
je n'ai pas de h pour la DLL, par contre dans mon pg cpp qui vva appelé ma DLL, je crée un point h ou je mets:
typdef void (WINAPI *DLL_Function_Imu_connect) (CString *setat, CString* defaut);
dans mon projet cpp dans Project->Settings, je rajoute le chemin pour accéder DLL.lib (mais je ne fais pas #import de ma DLL dans le cpp)

et il me suffit d'appeler ma fonction:
void main{DLL_Function_Imu_connect(etat, defaut)
...}
c'est bien ca? car apparemment ca ne marche pas!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Si ta fonction est bien Imu_connect() ET de type WINAPI:

void __stdcall Imu_connect(CString *setat, CString* defaut);
à mettre dans ton h.

pour les CSting et autres bidules à toi de voir, je n'utilise pas, je trouve que ça n'a rien à faire dans une dll.

ciao...
BruNews, MVP VC++
Messages postés
48
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
6 octobre 2005

en fait, j'ai déclaré ma fonction comme ceci car je l'avais vu dans un exemple:
extern "C"__declspec(dllexport) WINAPI IMU_connect(CString* etat, CString* defaut))
{....}
mais je ne sais pas ce qu'est WINAPI?