Faire une DLL en C++ utilisable par VB avec VC++

Faire un projet Dll (j'utilise un projet vide, mais on peut utiliser les options de dll prfabrique de VC)
On ajoute un fichier source
	on y ajoute la fonction DllMain:

	BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
	Cette fonction n'est appl que pour atacher ou dtacher la dll d'une excutable appelant.
	Pour plus d'info voir le code.

	on ajoute les fonctions qui seront exports avec _stdcall devant le nom de la fonction.
	on ajoute un fichier <nom du fihcier>.def
	on y met:

	LIBRARY <nom de la dll>     (moi c'est dllvb, c'est le nom du fichier .dll)

	EXPORTS
		<la 1er fonction export>  @<un nombre unique> (par ex: msgbox2 @1)
		<la 2em fonction export>  @<un nombre unique>        ( msgbox3 @2) 
		...
	Le @<un nombre> n'est pas obligatoire

Voil pour le cot C++


Dans VB il faut dclarer la fonction:
Declare function <nom de la fonction> lib "<nom de la Dll>" [alias "<nom de la fonction dans la Dll>"] (byval <les arguments>) as <le type renvoier>

c'est compliqu comme a!
On ne met alias <nom de la fonction dans la Dll> que si ce nom est diffrent de cellui dans VB
voil un exemple
decare function msgbox2 lib "dllvb.dll" (byRef buffer as string) as long

Si on met ByRef VB donne un pointeur sur la donner (ex: int *)
Si on met ByVal VB donne une copie de la donner (ex : int)
Mais Attention les chaine de caractre sous VB (string) sont des pointeur sur des caractre (char *)
donc si on met un byref avec une chaine de caractre VB nous donne un pointeur sur un pointeur sur des caractre (char **)
La fonction msgbox2 et GetVar utilise les char **

le type revoi est long car en C++ sous Win32 int=long
 
autre exemple:
decalre function MessageBox lib "dllvb.dll" alias "msgbox2" (byval buffer as string) as long

cet exemple appele la mme fonction que l'exemple prcdent ( cause du alias "msgbox2").


C'est Finie.
J'espre que vous avez compris, si non il y a les sources.
	


