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?