Einzelnen Beitrag anzeigen

wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#36

AW: DLL Exportiert ein Interface mit Strings...

  Alt 9. Apr 2017, 22:20
danke dir.
Meinst du so?
Delphi-Quellcode:
function calcsum(a: double; b: double):integer ; stdcall; external 'qmc_dll_Project1.dll';
procedure calcmain( var loesung: Pansichar) ; stdcall; external 'qmc_dll_Project1.dll';
procedure calcmaindummy( var loesung: PANsiChar) ; stdcall; external 'qmc_dll_Project1.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
    loesung: PAnsiChar;

begin
    ShowMessage(inttostr(calcsum(1,2)));
    getmem(loesung,300);
    calcmaindummy(loesung);

    ShowMessage(String(loesung));
end;
und in dll:
Code:
void __declspec(dllexport) __stdcall calcmaindummy(char* loesung){

strcpy(loesung,"TESTENDE:2ndLine"); //resultbuff;

}
oder muss ich in Delphi die Adresse übergeben?

  calcmaindummy(@loesung); Dann meckert er beim compiliern.

Habs jetzt dyn geladen und da komm tauch nur Schrott zurück:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  hmod : THandle;
  GetReturn : procedure ( var loesung: PANsiChar) ; stdcall;
  RetStr : PAnsichar;
begin
  hmod := LoadLibrary('qmc_dll_Project1.dll');
  if (hmod <> 0) then begin
    GetReturn := GetProcAddress(hmod, 'calcmaindummy');
    if (@GetReturn <> nil) then begin
      GETMEM(RetStr,20);
      GetReturn(RetStr);
      ShowMessage('Drive Type is : ' + string(RetStr));
    end
    else
      ShowMessage('GetProcAddress failed');
    FreeLibrary(hmod);
  end
  else
    ShowMessage('LoadLibrary Failed!');
end;
Ich galub das hat mit dem MEMMGR.LIB zu tun. MUss man da was machen oder wie?

DANKE
mfg
ws

Geändert von wschrabi ( 9. Apr 2017 um 22:38 Uhr)
  Mit Zitat antworten Zitat