On Tuesday, 15 May 2012 at 14:03:47 UTC, Gor Gyolchanyan wrote:
Can anyone, please, tell me what these manifests are, where do they fit in my application binaries, why is one needed to get the pretty windows 7 buttons and how to use them with DMD?

Just FYI, you don't actually *need* to include manifests in your executable, if you know another DLL already has them.

Here's a hack to show what I mean, for enabling visual styles:

void enableVisualStyles()
{
        TCHAR[MAX_PATH] dir;
        dir[GetSystemDirectory(dir.ptr, dir.length)] = '\0';
        enum
        {
                ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID = 0x00000004,
                ACTCTX_FLAG_RESOURCE_NAME_VALID = 0x00000008,
                ACTCTX_FLAG_SET_PROCESS_DEFAULT = 0x00000010,
        }
        auto actCtx = ACTCTX(ACTCTX.sizeof,
                ACTCTX_FLAG_RESOURCE_NAME_VALID |
                ACTCTX_FLAG_SET_PROCESS_DEFAULT |
                ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID,
                "shell32.dll", PROCESSOR_ARCHITECTURE_INTEL,
                0, dir.ptr, MAKEINTRESOURCE(124), null, null);
        auto hActCtx = CreateActCtx(actCtx);
        assert(hActCtx != INVALID_HANDLE_VALUE);
        ULONG_PTR ulpActivationCookie;
        BOOL success = ActivateActCtx(hActCtx, ulpActivationCookie);
        assert(success);
}

Basically, since shell32.dll already has our manifest, I can just call this function instead. :-)

Reply via email to