Einzelnen Beitrag anzeigen

DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#1

DLL Verständnis frage...

  Alt 28. Mär 2024, 14:11
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
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat