![]() |
DLL Funktions Aufruf führt zu access violation in eigener procedure
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:
// Funktioniert
function Finalize(ptr:integer):long; stdcall; external 'asignRKCom.dll';
Code:
// Ergibt einen Fehler
procedure Tfmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin Finalize(h); end;
Code:
Ich weiß nicht ob es ein Fehler meiner Deklaration ist oder Delphi ein Problem hat.
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; Oder es am Namen Finalize liegt. Edit : ich habe das ganze einmal anders Deklariert
Code:
Das brachte auch nichts.
function _Finalize(ptr:integer):long; stdcall; external 'asignRKCom.dll' name 'Finalize';
|
AW: DLL Funktions Aufruf führt zu access violation in eigener procedure
Zitat:
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.
Delphi-Quellcode:
Somit solltest du zumindest diese Unklarheit beseitigen können.
function FinalizeDLL(ptr:integer):long; stdcall; external 'asignRKCom.dll' name 'Finalize';
|
AW: DLL Funktions Aufruf führt zu access violation in eigener procedure
Ich würde auch mal bei der Convention suchen.
cdecl? PS:
Delphi-Quellcode:
function FinalizeDLL(ptr: Pointer{oder THandle}): LongInt; stdcall; external 'asignRKCom.dll' name 'Finalize';
|
AW: DLL Funktions Aufruf führt zu access violation in eigener procedure
Danke euch 2. Auf die Idee kam ich dann auch als ich es gepostet hatte.
Brachte leider nichts. |
AW: DLL Funktions Aufruf führt zu access violation in eigener procedure
Zitat:
|
AW: DLL Funktions Aufruf führt zu access violation in eigener procedure
![]() ![]() 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 :stupid: |
AW: DLL Funktions Aufruf führt zu access violation in eigener procedure
Hallo,
der Unterschied ist, wer den Stack der aufrufenden Funktion aufräumt. Macht man hier einen Konfigurationsfehler, wird der Stack 2mal aufgeräumt -> Puff. |
AW: DLL Funktions Aufruf führt zu access violation in eigener procedure
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. |
AW: DLL Funktions Aufruf führt zu access violation in eigener procedure
Ist sicher hilfreich für die anderen, wenn du mal die Doku dazu verlinken würdest:
![]() Seid ihr nicht etwas spät dran mit eurer Entwicklung? Ist schließlich schon der 2. Mai. |
AW: DLL Funktions Aufruf führt zu access violation in eigener procedure
Das Ding ist fertig, aber das waren Sachen die ich noch ändern wollte.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz