Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zugriffsschutzverletzung (https://www.delphipraxis.net/185955-zugriffsschutzverletzung.html)

Mattze 21. Jul 2015 19:38

Zugriffsschutzverletzung
 
Hallo,

also, sowas ist mir noch nicht passiert.
Was könnte das sein?
Beim Aufruf von
CM_Get_First_Log_Conf
bekomme ich:
Zugriffsschutzverletzung bei Adresse 000000. Lesen von Adresse 000000.

Der Aufruf erfolgt wie in einem C++-Programm, in dem es funktioniert.

Hat jemand eine Idee, wo ich da suchen müsste?

Gruß
Mattze

Dalai 21. Jul 2015 19:49

AW: Zugriffsschutzverletzung
 
Da ist ein Objekt nicht initialisiert/erzeugt. 8x 0 deutet immer auf einen Zeiger auf nil hin.

MfG Dalai

Mattze 21. Jul 2015 20:20

AW: Zugriffsschutzverletzung
 
Hallo,

das dachte ich eigentlich auch immer.
Aber bei
cmRet:= CM_Get_First_Log_Conf(@firstLogConf,dev, ALLOC_LOG_CONF);
gibt es nur einen Zeiger.
firstLogConf ist vom Typ LOG_CONF = DWord_Ptr = DWord und wird in der Procedure erzeugt - wenn ich das richtig verstanden habe.
Zumindestens wird es auch im C++-Programm nicht vorher erzeugt!
Und das verlangt auch msdn nicht.

(Ich habe es mal vorher erzeugt. Keine Änderung!)

Wo könnte es da hapern?

Gruß
Mattze

Dalai 21. Jul 2015 20:37

AW: Zugriffsschutzverletzung
 
Was ist mit den anderen Inputparametern, vor allem mit dem zweiten Parameter? MSDN sagt:
Zitat:

dnDevInst [in]
Caller-supplied device instance handle that is bound to the local machine.
Schätze mal, dass da was erzeugt bzw. ein Handle ermittelt werden muss.

MfG Dalai

Mattze 22. Jul 2015 05:59

AW: Zugriffsschutzverletzung
 
Hallo,

jetzt ist es mir peinlich.
War ein ausgesprochen dussliger Fehler!!!
Frei nach dem Motto:
"Vertrauen ist gut, Kontrolle ist besser!"
Die Lösung fiel mir gestern ein, als ich schlafen ging...
Das CM_Get_First_Log_Conf war einfach noch nicht belegt.
Dazu muss man LoadConfigManagerApi aus der CfgMgr32 machen (oder alles einzeln setzen).

(Also: Entschuldigung! Ich war durch die SetUpAPI etwas verwöhnt, weil das da ohne "Loadsetupapi" klappte. Wahrscheinlich wird das einfach implizit in einer Unit aufgerufen und ich wusste das nur nicht.)

Gruß
Mattze


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 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