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

  FORUM HardWare.fr
  Programmation
  API Win32

  Appel dll VB depuis VC++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appel dll VB depuis VC++

n°1722903
jdesert
Posté le 23-04-2008 à 15:21:59  profilanswer
 

Bonjour à tous,  
 
j'essaie depuis quelques jours d'appeler une dll VB en C++, à l'aide de visual studio 2008. Il se trouve que je rencontres quelques erreurs... Voici la démarche que j'ai mis en place.
 
Les tuto sur VS ( versions précédentes) conseillaient de faire une dll activeX.
 
Pour simuler, j'ai codé la dll suivante :  

Code :
  1. Public Class Class1
  2.     Public Function MyVBFunction(ByVal x As Integer) As Integer
  3.         MsgBox(x)
  4.     End Function
  5. End Class


 
J'ai rajouté les options visible depuis COM, lié avec une clef SN, et j'ai finalement utilisé l'outil OLE-COM Viewer pour voir le .idl de la dll.
 
Une fois avec le .idl, je l'ai compilé en l'insérant dans un projet C++ et je me suis retrouvé avec le fichier .h et .c. Jusque la, je me sentais relativement trop fort...
 
Souci, le client suivant  

Code :
  1. //le fichier .h est inclus ici
  2. HRESULT  hr;
  3. _Class1 *IVBTestClass = NULL;
  4. int sh=2;
  5. // Now we will intilize COM
  6. hr = CoInitialize(0);
  7. // Use the SUCCEEDED macro and see if we can get a pointer  
  8. // to the interface
  9. if(SUCCEEDED(hr))
  10. {
  11.  hr = CoCreateInstance( CLSID_Class1,
  12.     NULL,
  13.     CLSCTX_INPROC_SERVER,
  14.     IID__Class1,
  15.     (void**) &IVBTestClass);
  16.   if(SUCCEEDED(hr))
  17.               {
  18.   long   ReturnValue=42;
  19.   // We can test this HR as well if we wanted to
  20.    IVBTestClass->MyVBFunction(sh);
  21.   // We can test this HR as well if we wanted to
  22.   hr = IVBTestClass->Release();
  23.  }
  24.  else
  25.  {
  26.   // Something went wrong
  27.   cout << "CoCreateInstance Failed." << endl;
  28.  }
  29. }
  30. // Uninitialize COM
  31. getchar();
  32. CoUninitialize();


 
Au début, le prog me disait que la fonction MyVBFunction n'était pas un membre de la classe Class1. Alors, j'ai regardé le .idl et j'ai vu qu'en effet, la classe ne comportait ni attribut ni méthodes.  
 
Ne sachant pas trop quoi faire, j'ai moi meme rajouté la signature de la méthode au .idl, ce qui a forcément rajouté la signature dans le .h et la plus d'erreur de compilation. A l'éxecution, évidemment, ca marche pas (l'appel de la fonction VB soulève une exception que je ne sais pas identifier).
 
Sachant que tout ceci présente beaucoup d'étapes, je me suis dit qu'il y avait sans doutes un endroit ou j'ai utilisé une méthode fausse.
 
Quelqu'un aurait des suggestions ?

mood
Publicité
Posté le 23-04-2008 à 15:21:59  profilanswer
 


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

  Appel dll VB depuis VC++

 

Sujets relatifs
[RESOLU] "applet not initiated" : quelle erreur dans le code HTML ?[VB] [EXCEL] Copier cellules -> RESOLU
appel d'un exécutable[resolu] CSS - Appel d'un div codé ailleurs
est-il possible de faire un appel dynamique à une procédure??appel d'un executable
appel de fonctions membreAppel synchrone de callback
[Divers] Appel aux pros de ce forumFonction avec parametre en char * et appel avec string
Plus de sujets relatifs à : Appel dll VB depuis VC++


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