Appel dll VB depuis VC++ - API Win32 - Programmation
MarshPosté 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 :
Public Class Class1
Public Function MyVBFunction(ByVal x As Integer) As Integer
MsgBox(x)
End Function
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 :
//le fichier .h est inclus ici
HRESULT hr;
_Class1 *IVBTestClass = NULL;
int sh=2;
// Now we will intilize COM
hr = CoInitialize(0);
// Use the SUCCEEDED macro and see if we can get a pointer
// to the interface
if(SUCCEEDED(hr))
{
hr = CoCreateInstance( CLSID_Class1,
NULL,
CLSCTX_INPROC_SERVER,
IID__Class1,
(void**) &IVBTestClass);
if(SUCCEEDED(hr))
{
long ReturnValue=42;
// We can test this HR as well if we wanted to
IVBTestClass->MyVBFunction(sh);
// We can test this HR as well if we wanted to
hr = IVBTestClass->Release();
}
else
{
// Something went wrong
cout << "CoCreateInstance Failed." << endl;
}
}
// Uninitialize COM
getchar();
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.
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 :
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
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 ?