Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   AV bei FreeLibrary (https://www.delphipraxis.net/153360-av-bei-freelibrary.html)

cookie22 30. Jul 2010 04:56

AV bei FreeLibrary
 
hallo,

ich habe folgendes problem. ich rufe aus delphi 2005 eine in delphi 5 geschriebene dll auf. leider bekomme ich bei freelibrary eine access violation und weiss nicht warum.

der code sieht so aus:
Delphi-Quellcode:
type
  TGetRegString = function(n: PChar): PChar; stdcall;
  function GetRegString(n: PChar): PChar;

function GetRegString(n: PChar): PChar;
var
  GetRegString: TGetRegString;
  Handle: THandle;
begin
  Handle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'reg.dll'));
  if Handle <> 0 then
    begin
      @GetRegString := GetProcAddress(Handle, 'GetRegString');
      if @GetRegString <> nil then
        begin
          Result := GetRegString(n);
        end;
      FreeLibrary(Handle);
    end;
end;
den code der dll hab ich soweit wie möglich reduziert um fehler auszuschliessen.
Delphi-Quellcode:
library reg;

uses
  SysUtils,
  Classes{,
  SlokUtil};

{$R *.RES}


function GetRegString(n: PChar): PChar; stdcall;
var
  s: string;
begin
  //s := GetChallenge('$44§ds#hu&c1b76klhh' + StrPas(n), 0);
  //s := GetUnlockString(s, '$44§ds#hu&c1b76klhh', 0);
  Result := PChar(s);
end;

exports

  GetRegString;
 
begin
end.
sieht da jemand einen fehler, ich find da nichts. eigentlich sollte das so funktionieren oder bin ich blind.

mfg
cookie

Luckie 30. Jul 2010 05:02

AW: AV bei FreeLibrary
 
PChar ist ein Zeiger auf eine Zeichenkette. Da DLL und Exe unterschiedliche Speichermanager haben, funktioniert das nicht. Das heißt nicht FreeLibrary löst die Exception aus, sondern die tritt schon viel früher auf. Wie man Zeichenketten aus einer DLL zurückgibt, kannst du hier sehen: http://www.michael-puff.de/Artikel/StringDLL.shtml

cookie22 30. Jul 2010 07:01

AW: AV bei FreeLibrary
 
danke, jetzt geht es. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:32 Uhr.

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