Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DLL Dynamisch laden (Problem) (https://www.delphipraxis.net/127879-dll-dynamisch-laden-problem.html)

danu1104 20. Jan 2009 16:14


DLL Dynamisch laden (Problem)
 
Hallo, es geht darum eine DLL Dynamisch zu laden, ich habe mir auch bereits Tutorials angeschaut und hier im Forum nachgeguckgt, jedoch bin ich nicht fündig geworden.


Das laden der DLL sieht bei mir wie Folgt aus:

Delphi-Quellcode:

type


  TDLLFuncEncode = function(Str:String):PChar;

  Function LDynDll_Encode(Filename,Str:String):PChar;


var Http:TidHttp;


implementation


function LDynDll_Encode(Filename, Str:String):PChar;
var
  Func : TDllFuncEncode;
  DLLHandle : THandle;

begin
  DLLHandle := LoadLibrary (PChar(Filename));
  @Func := GetProcAddress (DLLHandle, 'Encode');
if DLLHandle <> 0 then
  begin
 if @Func <> nil then
  begin
    result := Func(str);
   end;
  end;
end;

Folgender code liegt in der DLL:
Delphi-Quellcode:

function EnCode(Str:String):Pchar; stdcall;
Var
   Temp1,Temp2,
   Temp3,Temp4:String;
begin
 If Str = '' then Exit else
  try
   Temp1:=dwReverseStr(Str);
   Temp2:=Base64Encode(Temp1);
   Temp3:=Base64Encode(Temp2);
   Temp4:=Base64Encode(Temp3);
  finally
   result:=Pchar(Base64Encode(Temp4));
  end;
end;
Ich habe 5 Stunden alles mögliche versucht, ich bekomme aber keine verschlüssslung raus sondern irgendwelche Binar Zeichen bzw Symbole. Wenn ich die DLL Fest einbinde functioniert es wunderbar, aber genau das möchte ich nicht.

Würde mich auf schnelle Antworten freuen :)

MFG Danu

Luckie 20. Jan 2009 16:21

Re: DLL Dynamisch laden (Problem)
 
Als allererstes kannst du nicht so einfach Strings zwischen DLL und Programm austauschen. Warum wurde hier im Forum schon öfters diskutiert.

Zum anderem muss man auf Groß- und Kleinschreibung achten. In der DLL heißt die Funktion EnCode, du willst aber die Funktion Encode laden.

danu1104 20. Jan 2009 16:30

Re: DLL Dynamisch laden (Problem)
 
Ne, Funktioniert leider nicht, habe beides versucht! :-(


Delphi-Quellcode:

// Programm Function

function LDynDll_Encode(Filename, Str:Pchar):PChar;
var
  Func : TDllFuncEncode;
  DLLHandle : THandle;

begin
  DLLHandle := LoadLibrary (PChar(Filename));
  @Func := GetProcAddress (DLLHandle, 'EnCode');
if DLLHandle <> 0 then
  begin
 if @Func <> nil then
  begin
    result := Func(str);
   end;
  end;
end;


// DLL Function

function EnCode(Str:Pchar):Pchar; stdcall;
Var
   Temp1,Temp2,
   Temp3,Temp4:String;
begin
 If Str = '' then Exit else
  try
   Temp1:=dwReverseStr(Str);
   Temp2:=Base64Encode(Temp1);
   Temp3:=Base64Encode(Temp2);
   Temp4:=Base64Encode(Temp3);
  finally
   result:=Pchar(Base64Encode(Temp4));
  end;
end;
Edit1= Code hinzugefügt

Luckie 20. Jan 2009 16:33

Re: DLL Dynamisch laden (Problem)
 
Zitat:

Zitat von danu1104
Ne, Funktioniert leider nicht, habe beides versucht! :-(

Was hast du beides versucht?

Und wegen der Strings: http://www.michael-puff.de/Artikel/StringDLL.shtml

danu1104 20. Jan 2009 16:40

Re: DLL Dynamisch laden (Problem)
 
Ich habe auf gross und kleinschreinung geachtet und Pchar statt eines Strings genommen.

Oder dürfen die variablen auch keine Strings sein? Also zb Temp1,Temp2 usw...

danu1104 20. Jan 2009 16:57

Re: DLL Dynamisch laden (Problem)
 
Ich habe jetzt mal getestet ob die function überhaupt ausgeführt wird


Delphi-Quellcode:
function EnCode(Str:Pchar):Pchar; stdcall;
Var
   Temp1,Temp2,
   Temp3,Temp4:String;
begin
// Mit showmessage()
Showmessage(Str);
 If Str = '' then Exit else
  try
   Temp1:=dwReverseStr(Str);
   Temp2:=Base64Encode(Temp1);
   Temp3:=Base64Encode(Temp2);
   Temp4:=Base64Encode(Temp3);
  finally
   result:=Pchar(Base64Encode(Temp4));
  end;
end;

Doch wie es scheint wird die DLL erst garnicht aufgerufen, aber wieso was ist falsch?

so rufe ich die DLL unter Button1Click auf in der TForm1 aus einer Pas Datei

Delphi-Quellcode:
Edit1.Text:=LDynDll_Encode(Pchar(ExtractFilePath(Paramstr(0))+'cryptemp.dll'),Pchar(Edit1.Text))

taaktaak 20. Jan 2009 17:03

Re: DLL Dynamisch laden (Problem)
 
nicht so meine Spielwiese, aber mir fällt folgendes auf

Delphi-Quellcode:
function LDynDll_Encode(Filename, Str:Pchar):PChar;
var
  Func : TDllFuncEncode;
  DLLHandle : THandle;

begin
  DLLHandle := LoadLibrary (PChar(Filename));
du übergibst einen PChar an die Funktion, dann noch mal ein PChar(PChar) in der ersten Zeile - liegt es daran?

danu1104 20. Jan 2009 17:07

Re: DLL Dynamisch laden (Problem)
 
Danke TaakTaak, doch funktioniert trozdem nicht.

Apollonius 20. Jan 2009 17:52

Re: DLL Dynamisch laden (Problem)
 
Du hast deinen Funktionszeiger nicht als Stdcall deklariert.

danu1104 20. Jan 2009 18:04

Re: DLL Dynamisch laden (Problem)
 
Ne liegt ebenfalls nicht daran


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz