Ordre des fonction dans le .def d'une DLL

Résolu
Signaler
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008
-
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
-
Bonjour je voudrais savoir comment déterminer l'ordre que vont avoir les fonctions d'une dll dans le fichier .def.

Car pour l'instant j'ai défini 3 fonctions dans cet ordre dans mon maindll.c :
/code

__declspec(dllexport) int verifdll()
{
//code ....
}

__declspec(dllexport) int closedevice()
{
//code ....
}

__declspec(dllexport) int opendevice()
{

//code ....

}

/code

Et je les retrouve dans cet ordre dans le .def:

opendevice @ 1 ;
verifdll @ 2 ;
closedevice @ 3 ;

Le problème vient donc lors de l'utilisation, lorsque j'apelle mes fonctions avec:

DMXconnectdevice = GetProcAddress((HINSTANCE)hModDll,(LPCSTR)2);

je me retrouve jamais avec la même fonction, puisque quand je change ou que je rajoute une fonction dans ma dll, ça change l'ordre et donc le numéro.

Ce que je voudrais c'est arriver à déterminer un ordre fixe quand je compile ma dll, ou alors mieux, je préfèrerais arriver à appeler les fonctions de ma dll avec leur nom et pas leur numéros.

du genre :
DMXconnectdevice = GetProcAddress((HINSTANCE)hModDll,(LPCSTR)"connectdevice");

J'ai essayé ça ne marche pas, j'ai une erreur de lien.

http://www.rc-bot.com

6 réponses

Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Normalement faut caster le retour de GetProcAddress, oui...
611 DMXopendevice = (DMXOPENDEVICE) GetProcAddress((HINSTANCE) hModDll,"opendevice");

en supposant :
typdef VOID (* DMXOPENDEVICE)(INT, LPSTR);
static DMXOPENDEVICE DMXopendevice;
et tu utilises ensuite DMXopendevice comme une fonction normale.

Pour le premier warning, déclare hModDll en tant que HINSTANCE si ce n'est pas déjà fait.
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
FARPROC GetProcAddress(
HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // name of function
);

lpProcName = au choix ordinal ou nom, pourquoi compliquer et utiliser ordinal, nom marchera toujours.
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008

Ah ah, ça marche, je sais pas ce que j'avais tenté la première fois avec mes noms pour que ça ne fonctionne pas mais maintenant elles sont reconnues.

J'ai donc mis le code suivant:
608    hModDll = LoadLibrary("Interfaces/OpenDMX-USB.dll");
611    DMXopendevice = GetProcAddress((HINSTANCE) hModDll,"opendevice");
612    DMXverifdll = GetProcAddress((HINSTANCE)hModDll,"verifdll");
613    DMXclosedevice = GetProcAddress((HINSTANCE)hModDll,"closedevice"); 


J'ai ces quatres warnings là
Main.c:608: warning: assignment makes integer from pointer without a cast
Main.c:611: warning: assignment from incompatible pointer type
Main.c:612: warning: assignment from incompatible pointer type
Main.c:613: warning: assignment from incompatible pointer type

Pour le premier ça doit pas être bien méchant je dois faire un cast faut juste que je cherche le bon type, je vais aller voir sur la msdn.

Mais pour les trois autres, ils n'empèchent pas le programme de fonctionner mais je voudrais savoir d'où ils viennent, car des warnings c'est pas très beau dans une compil.

http://www.rc-bot.com
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008

Voilà merci beaucoup Nebula, plus de warnings, mes fonctions sont bien définies, bref tout marche bien.

Suite au prochain épisode ... Je dois utiliser un thread pour envoyer des données à l'interface qui est pilotée par la dll, ça promet encore d'être "amusant" .

D'ici là, bonnes journées et encore merci.

http://www.rc-bot.com
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
pour mémoire

ça permet de faire des lib uniquement C, pas C++
et ne supporte pas les surdéfinitions de fonctions, C bien ça?
++
l'informagicien!
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Aucune idée, jamais fait de C++