Appel dll VB depuis VC++

Appel dll VB depuis VC++ - API Win32 - Programmation

Marsh Posté le 23-04-2008 à 15:21:59    

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 ?

Reply

Marsh Posté le 23-04-2008 à 15:21:59   

Reply

Sujets relatifs:

Leave a Replay

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