es klappt einfach nicht.
Es kommt Schrott.. (sieh bild)
Jetzt hab ich mal eine int via return (= summe) das klappt.
ABer die integer via return in den formalen paramters klappt nicht.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
hmod : THandle;
GetReturn : procedure ( var loesung: integer) ; stdcall;
Getsum: function ( a: double; b: double; c: double):integer ; stdcall;
RetStr : PAnsichar;
RetINT: integer;
begin
hmod := LoadLibrary('qmc_dll_Project1v2.dll');
if (hmod <> 0) then begin
GetReturn := GetProcAddress(hmod, 'calcmaindummy');
if (@GetReturn <> nil) then begin
GETMEM(RetStr,20);
//GetReturn(RetStr);
GetReturn(Retint);
ShowMessage('Loeung des QMC ist : ' + inttostr(Retint));
end
else
ShowMessage('GetProcAddress failed');
GetSUM := GetProcAddress(hmod, 'calcsum');
if (@GetSUM <> nil) then begin
ShowMessage('Summe ist : ' + inttostr(GetSUM(9,2,1)));
end
else
ShowMessage('GetProcAddress failed');
FreeLibrary(hmod);
end
else
ShowMessage('LoadLibrary Failed!');
end;
mit dem ohne __cdecl(..) geht es nicht.
Da findet er die function mit dem dyn laden nicht mehr.
Code:
void __stdcall calcmaindummy(int loesung){
char* demotest = "KTestende:2ndline";
//strncpy(loesung,demotest,5); //resultbuff;
loesung = 3;
return 0;
}
also doch so:
Code:
void __declspec(dllexport)__stdcall calcmaindummy(int loesung){
char* demotest = "KTestende:2ndline";
//strncpy(loesung,demotest,5); //resultbuff;
loesung = 3;
return 0;
}
int __declspec(dllexport) __stdcall calcsum(double a, double b, double c){
return a +b +c;
}