Pb DLL

cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005 - 20 juin 2005 à 10:38
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005 - 20 juin 2005 à 13:05
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 juin 2005 à 10:47
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++
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
20 juin 2005 à 11:01
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!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 juin 2005 à 11:24
Vérif que tu as bien mis le .lib de Imu_connect() au linker.

ciao...
BruNews, MVP VC++
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
20 juin 2005 à 11:32
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 juin 2005 à 11:48
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++
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
20 juin 2005 à 11:58
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!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 juin 2005 à 12:13
normal, appelle la fonction déclarée dans le h.

ciao...
BruNews, MVP VC++
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
20 juin 2005 à 12:41
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!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 juin 2005 à 12:59
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++
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
20 juin 2005 à 13:05
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?
0
Rejoignez-nous