XP Style per Manifest und DLLs



  • Hi!

    Ich habe mal in der FAQ gestöbert zum XP Style und das gefunden.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-187370.html

    Kleine Exe gemacht, brav die Fenster mit CreateWindow erstellt usw. herrlich, alles läuft und schön im XP-Style. 🙂

    Jetzt habe ich aus dieser Exe eine DLL gemacht, die von einer anderen Exe aufgerufen wird, doch nun kommt kein XP-Style mehr 😞

    Was kann ich tun?


  • Mod

    1. Ist das Mnaifest intern?
    2. Welche ID hat das Manifest nun in der DLL? IMHO sollte es nun die ID 2 haben.



  • Ich habe kein Manifest? Bei der exe habe ich auch keines benötigt. Einfach diese Zeilen da rein, dann diese Zeilen eingefügt:

    #include <commctrl.h>
    #pragma comment(lib, "comctl32.lib")
    

    InitCommonControls aufgerufen und gut. Aber wieso das jetzt bei der DLL nicht mehr will, weiß ich nicht 😞


  • Mod

    Ohne Manifest kein XP Stil!



  • Bei der Exe habe ich doch auch keine resource oder manifest gebraucht durch diese Zeilen!

    #if defined _M_IX86
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_IA64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_X64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #else
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #endif
    

    Warum brauche ich jetzt ein Manifest?!


  • Mod

    Witzbold. Diese Zeilen erzeugen ein Manifest, wenn der Manifest Compiler eingesetzt wird...

    Also was steht nun in dem Manifest der DLL?



  • Wo kann ich das nachsehen?

    Er nimmt diese Zeile:

    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
    

  • Mod

    Im Ausgabe Verzeichnis steht das Manifest. Oder lädst die fertige DLL im VS und öffnest Sie als Ressource. Dann kannst Du sehen was als Manifest wirklich in der Datei ist und welche ID diese hat.



  • Da ist eine Datei Namens:

    <dll-name>.dll.intermediate.manifest

    und da steht Folgendes drin:

    <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level='asInvoker' uiAccess='false' />
          </requestedPrivileges>
        </security>
      </trustInfo>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
        </dependentAssembly>
      </dependency>
    </assembly>
    

  • Mod

    DasManifest sieht OK aus. Und was ist nun in der DLL selbst unter welcher ID eingefügt?



  • Wie welche ID? Ich hab doch noch nicht mal eine Resourcen-Datei? Oder brauche ich die jetzt bei DLLs und bei Exen nicht?


  • Mod

    Wie wäre es mit ein wenig Grundlagen lesen in der MSDN? s.u.

    1. Ein internes Manifest ist eine Ressource in der EXE, ob Du willst oder nicht.
    2. Wenn ein Manifest drin ist, dann hat diese auch eine ID. Das aknnst Du auf dem von mir abgegeben Weg (laden der fertigen DLL in das VS) ermitteln.

    Grundlagen:
    http://msdn.microsoft.com/en-us/library/dd408052(VS.85).aspx
    Speziell:
    http://msdn.microsoft.com/en-us/library/aa376607(VS.85).aspx



  • An das Manifest der Exe komme ich nicht heran, da die von einem anderen Hersteller ist.


  • Mod

    Du musst doch gar nicht an das manifest der EXE rankommen...

    Du scheinst die Zusammenhänge zwischen Manifest und XP Stil nicht verstanden zu haben.



  • Außer das es extremes Gefrickel und Gefusche ist, nein.


Anmelden zum Antworten