Einzelnen Beitrag anzeigen

christophspaeth

Registriert seit: 7. Mär 2008
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

TTaskDialog und mehrere commctl32

  Alt 20. Jun 2018, 11:03
Hallo,
in einem Projekt (MMC-SnapIn) wollte ich einen TTaskDialog verwenden und war etwas verwundert, dass ich bei TTaskDialog.Execute immer false zurückbekomme.

Nach einer Debug-Session bin ich darauf gestoßen, dass GetProcAddress(ComCtl32DLL, 'TaskDialogIndirect') fehlschlägt.
Die Ursache dafür ist, dass Delphi sich die Commctl32.dll mit GetModuleHandle holt, und die MMC.exe laut Process Explorer zwei verschiedene Versionen der commctl32.dll geladen hat:
C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.16299.492_none_d02c a6ed5f31dad7\comctl32.dll und C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.16299.492_none_5d760 a37a7e0e2b6\comctl32.dll

Die MSDN schreibt ja auch deutlich "If lpModuleName does not include a path and there is more than one loaded module with the same base name and extension, you cannot predict which module handle will be returned."

Hat jemand eine Idee, wie ich das trotzdem zum Laufen bekommen kann? Idealerweise ohne die komplette VCL auseinanderzurupfen.
Christoph Späth
  Mit Zitat antworten Zitat