Hi,
ich habe eine
DLL die nur unter Delphi 10.4 erstellt werden kann. Strings/WideStrings in die
DLL übergeben klappt alles. Allerdings gibt es eine Funktion in der
DLL die Antwortet und einen langen String zurück gibt. Das bekomme ich einfach nicht hin. Nun hatte mich himitsu drauf aufmerksam gemacht das ich die Funktionen der
DLL als cdecl exportiere. Nach langem überlegen werde ich die
DLL wohl nur in dem einen Programm einsetzen was ich unter Delphi 2007 entwickle.
Soviel kurz zur Einleitung.
Also ich habe eine
DLL die unter Delphi 10 erstellt werden muss, aber selber habe ich nur Delphi 2007. Nun habe ich mir überlegt ich schreibe das um auf stdcall. Ich dachte mir die
DLL und das Programm sollte dann so aussehen.
Delphi 10:
Delphi-Quellcode:
library XDll;
uses
SimpleShareMem,
SysUtils,
Classes;
{$R *.res}
procedure GetTxt(var t:WideString); stdcall;
var
i :Integer;
begin
t:='B';
for i:=0 to 3000 do begin
t:=t+'A';
end;
end;
exports
GetTxt;
begin
end.
Im Programm würde es denn so aussehen.
Delphi 2007
Delphi-Quellcode:
type
TGetTxt = procedure (var t:WideString); stdcall;
var
fMain :TfMain;
GetTxt :TGetTxt;
HelperHnd :THandle;
procedure TfMain.btnGetTxtClick(Sender: TObject);
var
line :WideString;
begin
GetTxt(line);
end;
procedure TfMain.FormCreate(Sender: TObject);
begin
HelperHnd:=LoadLibrary('XDll.dll');
if ( HelperHnd<>0 ) then begin
@GetTxt:=GetProcAddress(HelperHnd,'GetTxt');
end;
end;
Nun zur meiner Frage: Klappt das so? Ich habe es natürlich schon laufen lassen und es geht. Die frage die sich mir stellt ist, ob ich mir damit nirgends den Speicher zerknacke.
Vielen Dank im voraus