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 : 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
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 : 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();
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 ?