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 DisableThreadLibraryCalls und COM-Objekte (https://www.delphipraxis.net/26699-disablethreadlibrarycalls-und-com-objekte.html)

scp 27. Jul 2004 23:29


DisableThreadLibraryCalls und COM-Objekte
 
Habe mal vor einer halben Ewigkeit eine Kontextmenü-Shell Extension geschrieben, die läuft auch wunderbar.
Nun dachte ich mir, machste mal ein Property Sheet (nonVCL nach dem )Tutorial. Hier treten aufeinmal Ausnahmefehler auf, wenn ich bei mehreren Dateien hintereinander auf Rechtsklick->Eigenschaften gehe. Er zeigt mir das Property Sheet mehrmals korrekt an, bei weiteren Versuchen stürzt das aufrufende Programm (WinNC) dann ab.

Baue ich aber DisableThreadLibraryCalls in DLL_PROCESS_ATTACH ein, klappt es wunderbar. Jetzt zu meinen eigentlichen Fragen:

1. Habe ich irgendwelche "unsichtbaren" Nachteile, wenn ich DisableThreadLibraryCalls einsetze?
2. Was bewirkt das überaupt?

NicoDE 28. Jul 2004 00:23

Re: DisableThreadLibraryCalls und COM-Objekte
 
Zitat:

Zitat von scp
1. Habe ich irgendwelche "unsichtbaren" Nachteile, wenn ich DisableThreadLibraryCalls einsetze?
2. Was bewirkt das überaupt?

DisableThreadLibraryCalls sorgt dafür, dass das Modul nicht mehr über das Erzeugen/Beenden von Threads im aktuelle Prozeß informiert wird. Kurz, DllMain wird nicht mehr mit DLL_THREAD_ATTACH/DLL_THREAD_DETACH aufgerufen.
Die DllMain ist bei Delphi-DLLs in der RunTime Library (RTL) gekapselt. Die Variablen DllProc und DllProcEx ermöglichen es, über die Aufrufe der DllMain informiert zu werden.

Ich sehe nur drei Möglichkeiten:
- deine LibraryProc(Ex) (falls vorhanden) reagiert falsch auf DLL_THREAD_ATTACH/DLL_THREAD_DETACH
- die RTL/Packages/Komponenten reagieren aufgrund unzureichender Konfiguration falsch (siehe IsMultiThread)
- die RTL hat einen Bug

Ansonsten kommen nur noch die üblichen Programmierfehler in betracht :)

Hast Du einen Call-Stack von dem Fehler?

scp 28. Jul 2004 01:52

Re: DisableThreadLibraryCalls und COM-Objekte
 
- Möglichkeit 1 kann es nicht sein, da ich ja erst eine LibraryProc eingefügt hab, nachdem der Fehler schon aufgetreten war
- Möglichkeit 2 denke ich mal auch nicht, da ich nur eine leere ActiveX-Bibliothek und ein COM-Objekt (Property Sheet) nach dem Tutorial verwenden brauche und schon tritt der Fehler auf.
- Möglichkeit 3 könnte sein, kann ich natürlich nicht beurteilen.

Einen Call-Stack habe ich nicht, wie komme ich da ran?
Ich krieg immer nur verschiedenste Fehlermeldungen, z.B. "EResourceNotFound: TForm3 not found" oder so ähnlich (WinNc 2000 ist auch ein Delphi-Prog, klappt aber bei allen anderen Shell Extensions die auf meinem System sind perfekt).


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