Je rencontre des difficultés pour appeler une fonction C++ depuis dll dans le projet VB.net. J'ai essayé avec les exemples simples ci-dessousPourquoi ai-je un message "Impossible de trouver un point d'entrée nommé 'SquareRoot' dans DLL"?
Pour C++ dll
#include <cmath>
extern "C" __declspec(dllexport) double SquareRoot(double value)
{
return pow(value, 0.5);
}
Je construis la dll et le copier dans le dossier VB.net
Pour le projet VB.net
Module Module1
<Runtime.InteropServices.DllImport("DLL_Test.dll")> _
Private Function SquareRoot(ByVal value As Double) As Double
End Function
Sub Main()
MsgBox(SquareRoot(2))
End Sub
End Module
Je continue d'obtenir Additional information: Unable to find an entry point named 'SquareRoot' in DLL 'DLL_Test.dll'
. Quand je lance dumpbin.exe
sur DLL_Test.dll
je reçois le texte suivant
File Type: DLL
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
Je ne sais pas ce que je suis absent, des idées? Merci d'avance.
Avez-vous utilisé '/ exports' lorsque vous avez exécuté' dumpbin'? –
En outre, la fonction globale 'pow' vient de' '. '' fournit 'std :: pow' à la place. –
On dirait que vous êtes en train de courir dans le mangling du côté C++. Vous pouvez utiliser Dependency Walker (http://www.dependencywalker.com/) pour afficher le nom de la fonction réelle que le code C++ exporte. En outre, cette question peut aider: http://stackoverflow.com/questions/1467144/how-do-i-stop-name-mangling-of-my-dlls-exported-function – Slapout