Einzelnen Beitrag anzeigen

eric_draven

Registriert seit: 26. Jul 2007
15 Beiträge
 
#5

AW: Problem bei dynamischem Aufruf einer DLL mit Übergabe von Pointern ala Win32API

  Alt 15. Mär 2011, 00:08
Erstmal danke für die Antworten Leider hilft mir das bei dem Grundproblem nicht viel weiter
Auch wenn ich es *sicher* mache, habe ich eine Verschiebung von 48Byte zwischen der Addr des PChar, die mir die .exe anzeigt und der, die mir die DLL angibt:

Delphi-Quellcode:
type TGetWindowsDirectoryA = function(lpBuffer : PChar; uSize : UINT): UINT; stdcall;

procedure TForm1.Button3Click(Sender: TObject);
var
  hLib: cardinal;
  MyGetWindowsDirectoryA: TGetWindowsDirectoryA;
  lpBuffer : PChar;
begin
  hLib := LoadLibrary('C:\DLL_Dynamisch_PChar\project1.dll');
// hLib := LoadLibrary('C:\windows\system32\kernel32.dll');
  if hLib <> 0 then
  begin
    @MyGetWindowsDirectoryA := GetProcAddress(hLib, 'GetWindowsDirectoryA');
    if not Assigned(MyGetWindowsDirectoryA) then
    begin
      RaiseLastOSError;
      exit;
    end;
  end
  else
  begin
    RaiseLastOSError;
    exit;
  end;
  GetMem(lpBuffer, 255);
  Label1.Caption := Format ('@lpBuffer:%p', [@lpBuffer]); //Ergibt bei mir: 0012F614; DLL:0012F5E4
  MyGetWindowsDirectoryA(lpBuffer, 255);
  Label2.Caption := lpBuffer;
  Freemem(lpBuffer);
end;
Woher kommt diese beknackte Verschiebung ?
Muss jetzt ins Bett, vielleicht träum ich ja von der Lösung, ansonsten (androh) bin ich morgen früh wieder da...
  Mit Zitat antworten Zitat