AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein DLL Funktions Aufruf führt zu access violation in eigener procedure
Thema durchsuchen
Ansicht
Themen-Optionen

DLL Funktions Aufruf führt zu access violation in eigener procedure

Ein Thema von stalkingwolf · begonnen am 2. Mai 2017 · letzter Beitrag vom 2. Mai 2017
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#1

DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 15:44
2 Probleme habe ich aktuell die nicht nicht ganz verstehe.

Wir setzen eine DLL von A-Trust ein zum auslesen einer Smartcard auf einem USB Stick.
Das ganze funktioniert eigentlich einwandfrei, wenn ich mein Programm als DEBUG Build laufen lassen.
Schalte ich auf RELEASE um, dann führen einige DLL Funktionsaufrufe zu einer Access Violation wenn meine procedure in Delphi beendet wird, welche die DLL Funktion aufruft.

Dann habe ich mit einer DLL Funktion das Problem das sie in Formclose ohne Fehler und in einer Procedure mit Fehler am Ende der Procedure aufgerufen wird.

z.b diese Funktion :
Code:
long Finalize(void* ptr);
Code:
function Finalize(ptr:integer):long; stdcall; external 'asignRKCom.dll';
// Funktioniert
Code:
procedure Tfmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Finalize(h);
end;
// Ergibt einen Fehler
Code:
procedure Tfmain.myFinalize;
var erg:integer;
begin
    erg:=Finalize(h); // Erg = 0;
end; // <---- Fehler

procedure Tfmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    myFinalize;
end;
Ich weiß nicht ob es ein Fehler meiner Deklaration ist oder Delphi ein Problem hat.
Oder es am Namen Finalize liegt.


Edit :
ich habe das ganze einmal anders Deklariert
Code:
function _Finalize(ptr:integer):long; stdcall; external 'asignRKCom.dll' name 'Finalize';
Das brachte auch nichts.

Geändert von stalkingwolf ( 2. Mai 2017 um 15:59 Uhr) Grund: Edit
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 15:52
Ich weiß nicht ob es ein Fehler meiner Deklaration ist oder Delphi ein Problem hat.
Oder es am Namen Finalize liegt.
Ich kann dir zwar jetzt nicht genau sagen wo dein Fehler liegt, aber die Funktion Finalize gibt es bei Delphi schon. Da deine Funktion wahrscheinlich im Kontext früher kommt als die aus den System Units, wird wohl deine verwendet.

Aber den Namen kannst du ja ganz einfach mal ändern indem du bei der Deklaration der Funktion den Namen auf FinalizeDLL oder so änderst und den Namen der entsprechenden DLL-Funktion mit übergibst.

function FinalizeDLL(ptr:integer):long; stdcall; external 'asignRKCom.dllname 'Finalize'; Somit solltest du zumindest diese Unklarheit beseitigen können.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 15:57
Ich würde auch mal bei der Convention suchen.
cdecl?

PS: function FinalizeDLL(ptr: Pointer{oder THandle}): LongInt; stdcall; external 'asignRKCom.dllname 'Finalize';
$2B or not $2B
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#4

AW: DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 16:04
Danke euch 2. Auf die Idee kam ich dann auch als ich es gepostet hatte.
Brachte leider nichts.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#5

AW: DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 16:07
Ich würde auch mal bei der Convention suchen.
cdecl?
Das geht. Jetzt muss ich mich mal reinlesen was der Unterschied ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 16:12
http://docwiki.embarcadero.com/RADSt...ufkonventionen
https://de.wikipedia.org/wiki/Aufrufkonvention -> siehe stdcall "Anders als bei"

Delphi nutzt übrigens fastcall/register und nicht pascal (unter x86) und in x64 nutzen Alle ein die CPU-Register wie in fastcall/register, nur das Aufräumen und der Stack wie bei C.
quasi FastCall+CDecl
$2B or not $2B

Geändert von himitsu ( 2. Mai 2017 um 16:24 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 16:55
Hallo,
der Unterschied ist, wer den Stack der aufrufenden Funktion aufräumt.
Macht man hier einen Konfigurationsfehler,
wird der Stack 2mal aufgeräumt -> Puff.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 16:56
Oder keiner räumt auf -> Puff

Jetzt haben wir zwei mal den Michael gerufen ... mal sehn wann er kommt.


Ob stdcall, cdecl oder sonstwas, das definiert der Quellcode für diese DLL, bzw. das Standardverhalten des verwendeten Compilers.
$2B or not $2B

Geändert von himitsu ( 2. Mai 2017 um 17:00 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 17:20
Ist sicher hilfreich für die anderen, wenn du mal die Doku dazu verlinken würdest:
http://labs.a-trust.at/developer/pdf...erkasseCOM.pdf

Seid ihr nicht etwas spät dran mit eurer Entwicklung? Ist schließlich schon der 2. Mai.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#10

AW: DLL Funktions Aufruf führt zu access violation in eigener procedure

  Alt 2. Mai 2017, 17:38
Das Ding ist fertig, aber das waren Sachen die ich noch ändern wollte.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:31 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