Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1163 connectés 

  FORUM HardWare.fr
  Programmation
  C

  DLL en C utilisée par VB

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DLL en C utilisée par VB

n°499525
yoyo+
Posté le 27-08-2003 à 12:34:35  profilanswer
 

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 :

Code :
  1. #include <string.h>
  2. #include <windows.h>
  3. #include <math.h>
  4. #define EXPORT __declspec (dllexport)
  5. long EXPORT errorMsg(char *buffer){
  6.     MessageBox(NULL,buffer,"Error",0);
  7.     return 0;
  8. }


et le code VB :

Code :
  1. Private Declare Function errorMsg Lib "f:\myLib.dll" (ByVal a As String) As Long
  2. Private Sub Form_Load()
  3. Dim a As Long
  4. a = errorMsg("test" )
  5. End Sub


 
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
mood
Publicité
Posté le 27-08-2003 à 12:34:35  profilanswer
 

n°499592
Ashe2
Posté le 27-08-2003 à 13:58:27  profilanswer
 

Faut que la fonction soit en __stdcall

n°499636
yoyo+
Posté le 27-08-2003 à 14:32:54  profilanswer
 

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 :
  1. EXPORTS
  2. errorMsg


 
Sauf que le compilateur me jette :
gcc: f:\dll.def: linker input file unused since linking not done
 
 :(  

n°500276
yoyo+
Posté le 28-08-2003 à 09:58:09  profilanswer
 

Même pas une ptite idée ?  :??:

n°500288
HelloWorld
Salut tout le monde!
Posté le 28-08-2003 à 10:10:44  profilanswer
 

T'as essayé :

Code :
  1. #define EXPORT __declspec (dllexport)
  2. EXPORT long __stdcall errorMsg(char *buffer){
  3.    MessageBox(NULL,buffer,"Error",0);
  4.    return 0;
  5. }


 
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 ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°500358
karlkox
Posté le 28-08-2003 à 11:16:09  profilanswer
 

Change :
 

Code :
  1. #define EXPORT __declspec (dllexport)


 
par  

Code :
  1. #define EXPORT __declspec (dllexport) WINAPI


n°500443
yoyo+
Posté le 28-08-2003 à 12:33:22  profilanswer
 

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 :
  1. set path=%path%;c:\dev-C_~1\Bin\
  2. C:\DEV-C_~1\Bin\gcc -c -DBUILDING_DLL=1 -I. "d:\dll.c"  -s  -IC:\DEV-C_~1\Include\ -IC:\DEV-C_~1\Include\G__~1 -IC:\DEV-C_~1\Include\ -LC:\DEV-C_~1\Lib\ -BC:\DEV-C_~1\Bin\
  3. C:\DEV-C_~1\Bin\dllwrap --export-all --def D:\export.def --output-def D:\debug.def --implib "D:\libNumeric.a" -o d:\Numeric.dll "d:\dll.o"
  4. pause


 
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 ?

n°500616
Ashe2
Posté le 28-08-2003 à 15:26:10  profilanswer
 

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)

n°500626
yoyo+
Posté le 28-08-2003 à 15:36:52  profilanswer
 

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  :jap:

n°500724
Ashe2
Posté le 28-08-2003 à 16:36:02  profilanswer
 

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  ;)
 

mood
Publicité
Posté le 28-08-2003 à 16:36:02  profilanswer
 

n°501081
karlkox
Posté le 28-08-2003 à 21:58:12  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  DLL en C utilisée par VB

 

Sujets relatifs
[Dev C++] Utiliser les fonctions définies dans une DLL[VBA] Passage de données à une DLL C++
[DLL] Prototype des fonctions exportéesréférencer une DLL créée en Delphi?
[VC++] Questions conceptuelles sur les Dll (et la sécurité)Probleme d utilisation d une DLL externe
[C++] Accéder à l'interface d'une Dll[C++ | VS .NET] MFC, ca va pas en "MFC in shared DLL" mais static oui
Gros problème : DLL manquante..[C/C++] - Librairies DLL et ActiveX pour l'utilisation du RS232
Plus de sujets relatifs à : DLL en C utilisée par VB


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR