Neues Thema starten

Zugriff auf die DLL

Hallo,


da ich doch erst mal "klein" anfangen muss und meine sdcard noch nicht da

ist versuche ich dll Version auszulesen. Der untere Code gibt mir aber

nur Hieroglyphen zurück, es scheint was mit der typ Umwandlung nicht zu stimmen. Sieht einer den Fehler?



private 

    { Private-Deklarationen } 

    procedure dllLaden; 

    procedure dllEntladen; 

 

 

  public 

    { Public-Deklarationen } 

  end; 

 

var 

  Form1: TForm1; 



function worm_getVersion : PChar;  stdcall; external 'WormAPI.dll'; 

 

implementation 

 

{$R *.dfm} 

 

var 

 hDLL : HMODULE; 

 

procedure TForm1.dllLaden; 

var 

  v, 

  s : String; 

  i : integer; 

begin 

   hDLL := LoadLibrary('WormAPI.dll'); 

   if hDLL <> 0 then   //DLL erfgolgreich geladen? 

   begin               //Wenn 0 dann laden fehlgeschlagen! 

     v := String(worm_getVersion); 

     Memo1.Text := v; 

     Form1.StatusBar1.Panels[1].Text := 'DLL erfolgreich geladen'; 

   end 

  else 

   begin 

     s := SysErrorMessage(GetLastError()); 

     ShowMessage('DLL fehlgeschlagen!'    + s); 

     Form1.StatusBar1.Panels[1].Text := 'Fehler!  DLL nicht geladen'; 

  end; 

end; 

 

procedure TForm1.DLLEntladen; 

begin 

  if hDLL <> 0 then 

  begin 

    FreeLibrary(hDLL); 

    hDLL := 0; 

    Form1.StatusBar1.Panels[1].Text := 'DLL entladen'; 

  end 

 else 

  begin 

    Form1.StatusBar1.Panels[1].Text := 'Fehler!  DLL nicht entladen'; 

  end; 

end;


Unter Delphi 5 läuft alles einwandfrei.

Unter Delphi XE4 bekomme ich immer  dieses Ergebnis


⸵3捥獤ⵡ汰楡⵮䡓㍁㐸


hat keiner einer Idee?


Da steht doch "DLL erfolgreich geladen" oder kannst du kein chinesisch?  :-) :-)


Ich habe die Vermutung du lädst hier zuvor irgend einen asiatischen Sprachtreiber hoch. Kann es sein, dass vielleicht im Compiler irgendwo noch etwas mit asiatischen Schriften eingestellt ist?


Ich kenne mich mit XE4 nicht aus. Mein Programm ist in Delphi 5 programmiert und jetzt ich bin zu Lazarus gewechselt, da habe ich noch echtes Pascal im Hintergrund und kein .Net Framework.

Hallo Jürgen,


du scheinst hier dynamisches und statisches Laden zu vermischen. 

Wenn du die Funktion so deklarierst lädst du die DLL statisch und kannst dir somit das LoadLibrary sparen.

 

function worm_getVersion : PChar;  stdcall; external 'WormAPI.dll'; 

 Schau dir mal diese Seite an, vielleicht hilft das:

https://www.swissdelphicenter.ch/de/showcode.php?id=950


Ich binde die DLL dynamisch ein.

Hier die Deklaration als Beispiel: 

 

type
  TWorm_getVersion = function: PAnsiChar;stdcall;

var
  worm_getVersion: TWorm_getVersion;

implementation

const StdCallDLL = 'WormAPI.dll';
var DLLHandle: THandle;

function InitSwissbitDll: Boolean;
begin
  if DLLHandle <> 0 then exit(true);

  DLLHandle := LoadLibrary(StdCallDLL);
  Result := DLLHandle <> 0;
  @worm_getVersion := GetProcAddress(DLLHandle, 'worm_getVersion');
end;

 

Ich hoffe das hilft.

Dennis


Anmelden oder Registrieren um einen Kommentar zu veröffentlichen