Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL dynamisch einbinden, was mach ich falsch ? (https://www.delphipraxis.net/40352-dll-dynamisch-einbinden-mach-ich-falsch.html)

arbu man 14. Feb 2005 17:53


DLL dynamisch einbinden, was mach ich falsch ?
 
Hi,

Ich versuche grade eine dll dynamisch einzubinden

Hier der DLL Code
Delphi-Quellcode:
library dll;

uses
  SysUtils,Classes;

{$R *.res}

function functionpchar(pc:pchar):pchar;
begin
  result:=PChar('Result ist: '+PChar(pc));
end;

exports
  functionpchar;

begin
end.
Und das Programm
Delphi-Quellcode:
...
type
  Tfunctionpchar = function(pc: Pchar): PChar;

function functionpchar(pc: Pchar; dll:string): PChar;
function functionstr(str:string):string;
...
implementation
...
function functionpchar(pc: Pchar; dll:string): PChar;
var Funktion: Tfunctionpchar;
    Handle: THandle;
begin
  Handle:=LoadLibrary(PChar(dll));
  if Handle <> 0 then begin
    @Funktion := GetProcAddress(Handle,'functionpchar');
    if @Funktion <> nil then begin
      result := Funktion(pc);
    end;
    FreeLibrary(Handle);
  end;
  showmessage('bis hier geht es');
end;

function functionstr(str:string):string;
begin
  result:=functionpchar(PChar(str),ExtractFilePath(Application.ExeName)+'dll.dll');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(functionstr('test'));
end;
Der Code läuft auch nur kommt eine Zugriffs verletzung :wall: :wall: :wall:
Was mach ich falsch :?:

Vielen Dank für eure Antworten

shmia 14. Feb 2005 18:01

Re: DLL dynamisch einbinden, was mach ich falsch ?
 
Zitat:

Zitat von arbu man
Ich versuche grade eine dll dynamisch einzubinden

Hier der DLL Code
Delphi-Quellcode:
library dll;

uses
  SysUtils,Classes;

{$R *.res}

function functionpchar(pc:pchar):pchar;
begin
  result:=PChar('Result ist: '+PChar(pc));
end;

exports
  functionpchar;

Das geht so nicht!!
Delphi-Quellcode:
function functionpchar(pc:pchar):pchar;
begin
  // in der folgenden Zeile wird ein AnsiString gebildet

  result:=PChar('Result ist: '+PChar(pc));
  // es wird ein Zeiger auf diesen String zurückgegeben
  // wenn diese Funktion verlassen wird, ist der String ungültig
  // und Result zeigt auf ungültige Daten

  // möglicherweise haben sind die Daten im Speicher noch intakt
  // aber das ist nicht von Dauer
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.

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