Einzelnen Beitrag anzeigen

wschrabi

Registriert seit: 16. Jan 2005
437 Beiträge
 
#40

AW: DLL Exportiert ein Interface mit Strings...

  Alt 9. Apr 2017, 21:43
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;
}
Miniaturansicht angehängter Grafiken
schroot.gif  

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