Mit dem Manifest sucht er die "neue" mit einer Version größer gleich 6:
Code:
<?
xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-
com:
asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="
win32"
name="DelphiApplication"
version="1.0.0.0"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="
win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
</assembly>
während die "normale" (in der system32) die Versionsnummer 5.82.2900.6028 hat. Das Manifest schaltet nun auf den WinSxS-Ordner (
Was ist der WinSxS Ordner) um und findet hier nun unter anderen die neuste Version 6.0.2900.6028. Das ist dann soweit mit allen Details klar.
Wo ist nun der Bug? Die Zugriffsverletzung in den Tiefen der comctl32 taucht bei beiden Komponenten bei einem derartigen Konstrukt auf:
Delphi-Quellcode:
Menu := CreatePopupMenu;
try
CM.QueryContextMenu(Menu, 0, 1, $7FFF, CMF_EXPLORE or CMF_CANRENAME);
danach geht's normal weiter. Das ganze ist jetzt "einfach nur noch interessant". Ob der Delphi-Compiler oder Windows nun das Problem ist, hilft nicht mehr besonders weiter. In anderer Sprachen/Sprachversionen/Konfigurationen funktioniert es wohl, wie man sieht. Und wieviel Leute verwenden schon diesen Methodenaufruf direkt...