Einzelnen Beitrag anzeigen

dust258

Registriert seit: 18. Aug 2008
62 Beiträge
 
#1

dll verursacht nach dem Ausführen Zugriffsverletzung

  Alt 23. Sep 2010, 09:06
Hallo Leute,
ich versuche grade eine Funktion aus einer externen dll in Delphi anzusprechen. Das ganze funktioniert so weit ich das erkennen kann auch ganz gut. Nur läuft meine prozedure danach immer auf eine Zugriffsverletzung.

Bis jetzt konnte ich sie immer über eine C# Programm problemlos ansprechen:
Code:
      [DllImport(DLLPath, EntryPoint="LoadJavaVM", CharSet=CharSet.Ansi,
          SetLastError=true, ExactSpelling=true, CallingConvention=CallingConvention.Cdecl)]
      public static extern int loadJavaVirtualMachine(string InstallPath, int maxMem);
loadJavaVirtualMachine(secSignerInstallPath, maxMem); //liefert 0 zurück wenn OK


Genau diese dll wollte ich nun auch in Delphi einbinden.
Code:
uses
  ShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TExt_LoadJavaVM_ = function(inInstallPath : PChar; maxMem : Integer): Integer; stdcall;

type
  TFormDllTest = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }

  public
    { Public-Deklarationen }
    InstallPath : PChar;
    maxMem : LongInt;
    DSLoadJavaVM: TExt_LoadJavaVM_;
    procedure loadVM;
  end;

var
  FormDllTest: TFormDllTest;

implementation

{$R *.dfm}

procedure TFormDllTest.Button1Click(Sender: TObject);
begin
  loadVM;
  Showmessage('hi'); //Diese Message wird niemals angezeigt
end;

procedure TFormDllTest.loadVM;
var
  LibHandle: THandle;
  liTest : integer;
begin
  LibHandle := loadLibrary('CallSecSignerDLL.dll');
  if LibHandle <> 0 then
    @DSLoadJavaVM := getProcAddress(LibHandle, 'LoadJavaVM');
  if (@DSLoadJavaVM <> nil) then
  begin
    liTest := DSLoadJavaVM('c:\extS', 256);
  end;
  freeLibrary(LibHandle);
  Showmessage(IntToStr(lITest)); //Diese Message wird noch angezeigt und gibt 0 zurück (0 = erfolgreich)
end;

end.
Die Prozedur loadVM wird ausgeführt, die funktion DSLoadJavaVM gibt mit ihrem Rückgabewerte an, dass der Vorgang erfolgreich war, aber nach Abschluss der Prozedur erscheint folgende Fehlermeldung:

"Im Projekt ... trat eine Problem mit folgender Meldung auf: 'access violation at 0x00000000: read of address 0x00000000'. Prozess angehalten. Einzelne Anweisungen oder Start fortsetzen"

Hat Jemand eine Idee?
  Mit Zitat antworten Zitat