DLL en C utilisée par VB - C - Programmation
Marsh Posté le 27-08-2003 à 14:32:54
ok, j'ai changé ca sauf que maintenant il n'export plus la fonction automatiquement. Donc j'ai crée un fichier dll.def qui contient :
Code :
|
Sauf que le compilateur me jette :
gcc: f:\dll.def: linker input file unused since linking not done
Marsh Posté le 28-08-2003 à 10:10:44
T'as essayé :
Code :
|
PS : il me semble que VB utilise des chaînes UNICODE. Toi tu exportes une fonctio qui accepte uen chaîne ANSI, alors méfiance ...
Marsh Posté le 28-08-2003 à 11:16:09
Change :
Code :
|
par
Code :
|
Marsh Posté le 28-08-2003 à 12:33:22
Bon j'ai trouvé :
Quand devc++ compile une dll il lance gcc puis dllwrap
Le probleme c'est quand on fournit un *.def, devc++ l'envoie a gcc au lieu de dllwrap et ca plante, donc j'ai refait un batch qui lance gcc et dllwrap avec mon *.def :
Code :
|
Pour l'histoire des chaines c'était juste pour un test, mon vrai programme n'en utilise pas par contre ma fonction en C utilise des "float x[]", comment est ce que je déclare ca en vb ?
Marsh Posté le 28-08-2003 à 15:26:10
Ce serait pas plus simple de faire un objet COM que ton programme VB utilisera? (bon évidemment si il y a qu'une fonction a exporter c'est un peu bete)
Marsh Posté le 28-08-2003 à 15:36:52
Ashe2 a écrit : Ce serait pas plus simple de faire un objet COM que ton programme VB utilisera? (bon évidemment si il y a qu'une fonction a exporter c'est un peu bete) |
Oula je connais pas trop ca...
Tu peux m'en dire un peu plus
Marsh Posté le 28-08-2003 à 16:36:02
En très gros et en résumé, COM (ou ActiveX ou OLE, ce qui est a peu près pareil dans l'idée) permet de créer des interfaces accessibles à partir de la plupart - enfin, les principaux en tout cas - langages.
Par exemple, DirectX est fait à partir d'objets COM (enfin, sauf la version Xbox, mais bon on s'en fout). Internet Explorer est un paquet d'objets COM, aussi (IWebBrowser, par exemple). Pareil pour DirectShow. Ces objets peuvent être réutilisés pour afficher par exemple une page HTML dans une fenêtre (il doit y avoir ca de base dans VB). Voila pour le résumé.
Sinon pour savoir comment s'en servir, suffit d'aller sur MSDN. Il y a aussi de nombreux tutoriaux sur www.codeguru.com. En C c'est probablement un peu plus compliqué qu'en C++, et moins bien documenté, mais ca reste faisable.
Après t'auras plus qu'a faire un CreateObject() dans ton projet VB (ou Delphi ou un script ASP ou ce que tu veux) et ca fonctionnera... si tout se passe bien
Marsh Posté le 28-08-2003 à 21:58:12
C'est vraiement se compliquer la vie ... un objet COM, juste pour ca. Personnellement, j'ai fait pas mal de DLL (en C/C++/PureBasic) et j'ai toujours défini mon export comme ce que j'ai définie plus haut, j'avais toute sorte d'argument en param (*char, *float, *byte ...), pour les *char j'envoyais le pointeur sur une chaine depuis VB ( StrPtr(la_chaine) ), et je n'ai jamais eu le moindre problème.
Marsh Posté le 27-08-2003 à 12:34:35
Bon voila je voudrait faire une dll en C que je souhaiterais utilisée après avec VB.
J'utilise DevC++4 et Vb4.
Voila le code en C :
et le code VB :
Ca marche, ca m'affiche bien une fenetre mais après ca m'affiche :
Erreur d'éxécution 49:
Convention d'appel de dll incorect
J'ai essayé de faire une fonction qui renvoi des long, des int, rien du tout, sans code dedans mais j'ai toujours cette erreur.
Une idée?
Message édité par yoyo+ le 27-08-2003 à 14:14:48