Appeler dll VB depuis VC++
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 2 3 4 5 6 7
|
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
//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.
Quelqu'un aurait des suggestions ?