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.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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
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.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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();
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 ?
Partager