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