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 Prozedureinsprungpunkt "TraceMessage" in "ADVAPI32.dll" nicht gefunden (https://www.delphipraxis.net/153882-prozedureinsprungpunkt-tracemessage-advapi32-dll-nicht-gefunden.html)

CodeX 19. Aug 2010 02:33

Prozedureinsprungpunkt "TraceMessage" in "ADVAPI32.dll" nicht gefunden
 
Ich versuche erfolglos herauszufinden, warum ein bestimmtes Projekt unter Windows2000 nicht starten möchte. Ab XP startet es problemlos, jedoch bei 2000 erscheint direkt beim Start folgende Meldung und das Programm wird gar nicht erst angezeigt.
Code:
Der Prozedureinsprungpunkt "TraceMessage" wurde in der DLL "ADVAPI32.dll" nicht gefunden.
Nun habe ich zwar schon herausgefunden, dass TraceMessage erst ab XP vorhanden ist und deshalb meckert 2000. Aber ich kann beim besten Willen nicht finden, wo TraceMessage in dem Projekt überhaupt vorkommt. Ich habe alle *.pas Dateien nach TraceMessage und ADVAPI32 durchsuchen lassen, aber nichts gefunden. Das heißt irgendetwas ruft irgendetwas auf, wo dann TraceMessage dynamisch verlinkt ist.

Nun habe ich Delphi aber nicht unter Win2000 installiert und kann das entsprechend auch nicht debuggen.

Wie gehe ich am besten vor, um herauszufinden, an welcher Stelle auf TraceMessage zugegriffen wird?
Oder kann ich im Projekt generell irgendwie sagen, dass diese Funktion unter 2000 nicht geladen werden soll?

himitsu 19. Aug 2010 03:34

AW: Prozedureinsprungpunkt "TraceMessage" in "ADVAPI32.dll" nicht gefunden
 
Nutzt du irgendwas zur Fehleranalyse in deinem Programm, wie z.B. MadExcept?

Tritt der Fehler direkt beim Start auf oder erst später?
(eventuell mal über F7, F8 und Co. versuchen rauszufinden, wo sich dieses versteckt)

Bernhard Geyer 19. Aug 2010 06:17

AW: Prozedureinsprungpunkt "TraceMessage" in "ADVAPI32.dll" nicht gefunden
 
Hol dir mal den Dependency Walker. Evtl. ist es ja nich die Exe direkt die das verursacht sondern eine DLL welche diese Methode bindet.

CodeX 19. Aug 2010 12:33

AW: Prozedureinsprungpunkt "TraceMessage" in "ADVAPI32.dll" nicht gefunden
 
Zitat:

Zitat von himitsu (Beitrag 1043226)
Nutzt du irgendwas zur Fehleranalyse in deinem Programm, wie z.B. MadExcept?

Hatte ich bislang nicht. Hab mir jetzt aber mal dieses MadExcept installiert. Laut Beschreibung war das sehr vielversprechend. Das Einbinden hat wohl auch geklappt (die exe ist gut 10% größer geworden), aber beim Ausführen unter 2000 kommt noch genau der gleiche alte Fehler. Ist wohl keine Exception zur Laufzeit, sondern beim Initialisieren - und da scheint das nicht zu funktionieren.

Zitat:

Zitat von himitsu (Beitrag 1043226)
Tritt der Fehler direkt beim Start auf oder erst später?

Kommt direkt nach einem Doppelklick auf die exe. Nach der Bestätigung erscheint das Programm gar nicht erst.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1043233)
Hol dir mal den Dependency Walker. Evtl. ist es ja nich die Exe direkt die das verursacht sondern eine DLL welche diese Methode bindet.

Bin nicht so ganz sicher, was ich mit dem Tool alles machen kann, aber ich glaube, damit komme ich auch nicht weiter. Links in der Baumstruktur sehe ich die ADVAPI32.DLL als direkten Zweig von dem Programm (also kein Unterzweig), wird also wohl direkt eingebunden. Aber das ist kaum Verwunderlich. Diese DLL verwenden die meisten Programme. Nur dieses TracecMessage kam eben erst nach Win2000 hinzu. Rechts unten kann ich die Funktion auch finden, aber ich weiß nicht, was ich mit den Infos Ordinal, Hint und Entrypoint (ntdll.EtwTraceMessage) machen kann.

Auf jeden Fall vielen Dank für die Ideen! Habt Ihr vielleicht noch andere Ansätze?

CodeX 21. Aug 2010 02:19

AW: Prozedureinsprungpunkt "TraceMessage" in "ADVAPI32.dll" nicht gefunden
 
Habs hinbekommen.
Habe die DLL ausfindig gemacht, die auf die Funktion aus der anderen DLL zugegriffen hat und habe die DLL jetzt anders eingebunden. Da Delphi erst ab Version 2010 Delayed DLL Loading unterstützt, habe ich mich für meine 2006er Version dieser Methode hier bedient: http://hallvards.blogspot.com/2008/0...g-of-dlls.html
Für den Fall, dass es jemanden interessiert, die man DLLs nur bei Bedarf laden kann, ohne sie aufwändig explizit einbinden zu müssen. ;)


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