bonjour,
Mon problème est le suivant : je dispose d'une dll écrite en C# avec le visual studio 2008 (code 'managé' avec net framework 3.5), et je souhaite utiliser les fonctions de cette dll ds un programme C++ standard (non managé).
En guise d'exemple, ma dll ne contient actuellement qu'une seule fct :
public class Class1
{
public static int functopo()
{
return 11;
}
}
J'ai résolu un 1er problème : rendre les fcts exportées 'visibles' pour le code non managé; en gros cela consiste à générer le fichier .il (intermediate langage) à partir de la dll, y modifier quelques lignes puis regénérer la dll (pour + de détails : http://www.c-sharpcorner.com/Uploa [...] ged.aspx). Après cette manipulation, l'outil Dependency Walker me montre bien les fonctions exportées par la dll.
Ensuite je génère un fichier .def :
LIBRARY DLLTOPO
EXPORTS
functopo
puis un fichier .lib (confer http://support.microsoft.com/kb/131313/en-us), et ds visual studio 2005 j'incorpore ce lib ds mon projet C++ ; le code appelant la fct de dll :
extern int functopo();
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
functopo();
...
}
--> erreur au linkage : error LNK2001: unresolved external symbol "int __cdecl functopo(void)" (?functopo@@YAHXZ)
Je sais que __cdecl est la 'calling convention' propre au C, et que en C# c'est la _stdcall convention qui est utilisée, mais à ce stade je suis bloqué.
Message édité par jpg16 le 11-04-2008 à 09:02:14