begin process at 2012 05 30 00:53:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Ordre des fonction dans le .def d'une DLL


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

Ordre des fonction dans le .def d'une DLL

dimanche 7 novembre 2004 à 21:38:50 | Ordre des fonction dans le .def d'une DLL

Mastersam

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.



dimanche 7 novembre 2004 à 21:48:41 | Re : Ordre des fonction dans le .def d'une DLL

Nebula

Membre Club
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.
dimanche 7 novembre 2004 à 22:04:18 | Re : Ordre des fonction dans le .def d'une DLL

Mastersam

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.


dimanche 7 novembre 2004 à 22:17:32 | Re : Ordre des fonction dans le .def d'une DLL

Nebula

Membre Club
Réponse acceptée !
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.
dimanche 7 novembre 2004 à 22:33:20 | Re : Ordre des fonction dans le .def d'une DLL

Mastersam

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.



lundi 8 novembre 2004 à 10:06:58 | Re : Ordre des fonction dans le .def d'une DLL

magic_Nono

Membre Club
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!
lundi 8 novembre 2004 à 13:18:40 | Re : Ordre des fonction dans le .def d'une DLL

Nebula

Membre Club
Aucune idée, jamais fait de C++


Cette discussion est classée dans : fonction, code, ordre, dll, def


Répondre à ce message

Sujets en rapport avec ce message

DLL sou VS.net2003, puis de la DLL à la XLL [ par gadzou ] Bonjour, Dans l'extension via DLL C++ des fonctionnalités de VBA, j'adoptais sous VS6.0 l'architecture .def + .h + .cpp, où le .def contenait <spa Code pour donner l'ordre d'execution de la fonction enregistrer sous dans un porgramme [ par PunchRoyal ] Bonjour,Je débute en C.Je souhaiterais savoir quel est le code en C qui donne l'ordre d'éxecuter la fonction enregistrer sous et comment cette fonctio 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 problème de passage de fonctions via dll [ par youppyy ] Bonjour, J'ai deux fonctions sont enregistrées dans une dll ecrite en langage C sur Dec-c++ : J'ai une fonction A qui renvoie une donnée et une fonct 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 .dll [ par dhahrikhedher ] comment ajouté un dll[code=cpp][/code]avec visual studio 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 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 Chargement DLL [ par alcolow ] Bonjour, Actuellement pour un stage, je développe une application Windows Mobile 6.X en c++ sous VS2008 dans laquelle j'ai besoin de charger une DLL. CLR - Utiliser CString et System::String^ [ par phantom_2005 ] Bonjour à tous, j'ai créé une dll managée C++ (VS2005) pour utiliser avec une application C#. Cette Dll managée charge statiquement une dll non manag


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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 : 1,498 sec (3)

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