créer une dll à partir d'une librairie statique

créer une dll à partir d'une librairie statique - C++ - Programmation

Marsh Posté le 18-01-2006 à 15:56:47    

Bonjour,
 
j'aimerai créer une dll à partir d'une libriairie statique (.lib), c'est une ibrairie fourni par un fabricant et je ne possède rien d'autre qu'un .h qui contient les fonctions prototypée..
 
comment créer une dll à partir de cela? je crois qu'il faut un fichier .def qui contient la liste des fonctions.. comment le générer?
 
avec gcc ou visual c++ 2005
 
merci d'avance.

Reply

Marsh Posté le 18-01-2006 à 15:56:47   

Reply

Marsh Posté le 18-01-2006 à 16:03:12    

Le mieux c'est de creer un "wrapper" de tes functions, autrement dit des functions que tu exportes (style WINAPI ...) et qui appelle les functions de ta lib static.
Tu peux te creer un .h de ta DLL, ou meme pas besoin si tu la charge dynamiquement et recupere les point d'entree.
 
Pour le .def, la syntaxe :
 
DESCRIPTION 'ma Dll"
VERSION x.y
 
// la c'est le plus important
 
EXPORTS
      FunctionName1
      FunctionName2
       .....
 
 

Reply

Marsh Posté le 18-01-2006 à 16:17:33    

Merci pour l'aide, j'ai créé un fichier .DEF comme indiqué avec la liste des fonctions.
 
le problème c'est que des fonctions dans des classes différentes ont le même nom.. alors il me met ce message lorsque je compile :
 

Code :
  1. Warning LNK4022 : cannot find unique match for symbol 'NomDeMaFonction'


 
dois-je mettre : NomDeLaClasse::NomDeLaFonction ? ou qqch du genre...
 
en fait je ne m'y connait pas du tout en c++  :sweat:


Message édité par gilbertc le 18-01-2006 à 16:20:28
Reply

Marsh Posté le 18-01-2006 à 16:25:43    

Alors c'est un peu plus complique, si tu as des classes ca veut dire qu'il faut des objets pour appeller les functions (qui deviennent des methodes). Sauf evidemment si ce sont des methodes statiques, auquel cas tu peux mettre le nom de la classe devant oui. Si ces objects sont instancies dans la library (apres une intialization tu peux appeller la methode de l'object).
Je peux pas en dire beaucoup plus, vu le peu d'information ..mais vraisemblablement il faut que tes functions instancient un object pour appeller les methodes de l'objet...
Au fait pourquoi veut tu en faire une DLL, tu peux peut etre integrer la lib static et instancie les objects dans ton application ??

Reply

Marsh Posté le 18-01-2006 à 16:35:30    

En fait ouais si je peux appeler directement la librairie statique ça m'arrangerait bien, simplement je ne crois pas que je puisse le faire.
 
Je développe mon application en vb .net 2005 et la librairie statique est en c++ j'ai lu qu'une librairie statique ne pouvait êtr eutilisée par un soft ds un autre langage, alors qu'une dll le pouvait.
 
voici le .h fourni par le fabricant : cyAPI.h
 
et le .def que j'ai fait : cyAPI.def
 

Reply

Marsh Posté le 18-01-2006 à 16:44:17    

Vu les objects, le .def que tu as ne marchera pas ...
Je pense que le plus simple derait de creer les functionalites que tu veux dans ton appli VB dans la DLL elle-meme. J'ai pas vraiment le temps de tout lire, mais en gros :
 
- Tu cree l'object dans la DLL avec une function INIT, tu recupere un "handle" de cet obbject dans ton appli
- Tu crees les function dans la DLL, tu passes le handle de l'object a chaque appel, tu appelle les functionalites de l'object
- Tu cree une function de  cleanup de l'object quand tu en a plus besoin ..
 
C'est plus simple si tu n'as besoin que d'un des objects, et que les operations sont simples. Sinon demande au fournisseur ou sur les forums, peut etre quelqu'un a deja ecrit une equivalence

Reply

Marsh Posté le 18-01-2006 à 16:57:21    

okay.. merci bien pour l'aide
 
 
je vais faire cela... et je verrai bien  :wahoo:
 
lol mais y'a juste une chose qi m'échappe... comment faire ces init etc en vb j'ai compris... mais ma dll n'existe pas pr l'instant...

Reply

Marsh Posté le 18-01-2006 à 17:05:39    

les Init et les functions de ta dll tu les ecrit en C / C++ dans la DLL. Tu appelles ces functions depuis ton code VB.

Reply

Marsh Posté le 18-01-2006 à 17:07:27    

ok parfait.. merci bien

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed