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)

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;
ensuite ma fonction C++ qui load la dll, et lance la fonction.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
typedef char* (*TestPCharFunc)();
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);
				}
			 }
Cel� me donne comme r�sultat "z" ... soit, la 1�re lettre de ce que me retourne la fonction.



J'ai un soucis �galement avec une fonction de m�me type, mais qui retourne de l'integer.

la fonction delphi
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
Function test:Integer;stdcall;
begin
  Result:=9;
end;
la fonction C++
Code : S�lectionner tout - Visualiser dans une fen�tre � part
typedef int (*TestFunc)();
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);
				}
			 }
Ceci ne compil pas, et me donne une erreur
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.