Bonjour � tous,
J'ai besoin d'utiliser une dll faite en delphi dans un projet C++.
Je fais quelques test avec une dll bidon et un projet bidon, juste pour avoir le principe de base, mais je rencontre diff�rents probl�mes.
Visiblement le load de la DLL, et le load des fonctions de passe correctement, par contre la r�cup�ration des r�sultat ce n'est pas pareil.
Tout d'abord, une fonction delphi qui me retourne une variable de type PChar (on m'a dit qu'il fallait du pchar pour le C++, mais je n'en suis pas plus certain)
ensuite ma fonction C++ qui load la dll, et lance la fonction.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 Function testpchar:pchar;stdcall; var res : pchar; begin StrPCopy(res,'zRésultat de testpchar'); Result:= res; end;
Code : S�lectionner tout - Visualiser dans une fen�tre � part typedef char* (*TestPCharFunc)();Cel� me donne comme r�sultat "z" ... soit, la 1�re lettre de ce que me retourne la fonction.
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 private: System::Void DelphiTestPChar() { std::string resultpchar ; String^ resultpchar2; TestPCharFunc fntestpchar; // Load DLL file HINSTANCE hInstLibrary = LoadLibrary((LPCWSTR)L"Project4.dll"); if (hInstLibrary){ // Get function pointer fntestpchar = (TestPCharFunc)GetProcAddress(hInstLibrary, "testpchar"); // Call function. if (fntestpchar){ resultpchar = fntestpchar(); resultpchar2 = gcnew String(resultpchar.c_str()); MessageBox::Show(resultpchar2,"msg",MessageBoxButtons::OK,MessageBoxIcon::Question); } // Unload DLL file FreeLibrary(hInstLibrary); }else{ MessageBox::Show("DLL Failed To Load!","msg",MessageBoxButtons::YesNo,MessageBoxIcon::Question); } }
J'ai un soucis �galement avec une fonction de m�me type, mais qui retourne de l'integer.
la fonction delphi
la fonction C++
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4Function test:Integer;stdcall; begin Result:=9; end;
Code : S�lectionner tout - Visualiser dans une fen�tre � part typedef int (*TestFunc)();Ceci ne compil pas, et me donne une erreur
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 private: System::Void DelphiTest() { int resulttest; TestFunc fntest; // Load DLL file HINSTANCE hInstLibrary = LoadLibrary((LPCWSTR)L"Project4.dll"); if (hInstLibrary){ // Get function pointer fntest = (TestFunc)GetProcAddress(hInstLibrary, "test"); // Call function. if (fntest){ resulttest = fntest; } // Unload DLL file FreeLibrary(hInstLibrary); }else{ MessageBox::Show("DLL Failed To Load!","msg",MessageBoxButtons::YesNo,MessageBoxIcon::Question); } }
Code : S�lectionner tout - Visualiser dans une fen�tre � part Error 1 error C2440: '=' : cannot convert from 'test_apidll::Form1::TestFunc' to 'int'
Je suis sur qu'il n'y a pas grand chose � faire pour que cel� tourne, mais vu le nombre d'ann�es qui me s�parent de ma courte pratique du C++ ... je ne trouve pas.
Quelqu'un peut-il m'aiguiller, ou mieux, me corriger ce bout de code ?
Merci d'avance.
Partager