AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi dll verursacht nach dem Ausführen Zugriffsverletzung

dll verursacht nach dem Ausführen Zugriffsverletzung

Ein Thema von dust258 · begonnen am 23. Sep 2010 · letzter Beitrag vom 23. Sep 2010
Antwort Antwort
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
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.381 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: dll verursacht nach dem Ausführen Zugriffsverletzung

  Alt 23. Sep 2010, 10:03
"cdecl" und "stdcall" unterscheiden sich:

http://de.wikipedia.org/wiki/Aufrufkonvention
  Mit Zitat antworten Zitat
dust258

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

AW: dll verursacht nach dem Ausführen Zugriffsverletzung

  Alt 23. Sep 2010, 10:53
Super, danke. Jetzt funktioniert es ^^
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf