如何将资源添加到我的D可执行文件中?如何嵌入清单?

时间:2012-09-03 08:06:22

标签: winapi button resources manifest d

我尝试使用WinAPI在D中进行一些gui编程。我的问题是按钮看起来像the question another user asked.中那样丑陋。为了解决这个问题,我想在我的D应用程序中嵌入一个清单。只要我可以将资源包含到我的可执行文件中,我也应该能够根据this Microsoft documentation.手动添加清单

所以我的问题是:如何在Visual Studio上的D应用程序中包含资源?甚至可以这样做吗?如果没有,还有其他方法让按钮看起来不错吗?

5 个答案:

答案 0 :(得分:1)

有点难看,但它完成了工作,没有任何清单:

auto enableVisualStyles()
{
    TCHAR dir[MAX_PATH];
    dir[GetSystemDirectory(dir.ptr, dir.length)] = '\0';
    auto actCtx = ACTCTX(
        ACTCTX.sizeof, 0x0C, "shell32.dll", PROCESSOR_ARCHITECTURE_INTEL,
        0, dir.ptr, MAKEINTRESOURCE(124), null, HMODULE.init);
    ULONG_PTR ulpActivationCookie;
    return ActivateActCtx(CreateActCtx(actCtx), ulpActivationCookie);
}

只需确保在程序启动时调用一次。

答案 1 :(得分:1)

我不熟悉将dmd集成到Visual Studio中,但实现所需的一种方法是将已编译的.res文件添加到传递给dmd.exe的文件列表中。例如:

dmd.exe main.d manifest.res

我希望您的VS集成中有一些方法可以将文件添加到IDE用来编译代码的dmd命令中。

答案 2 :(得分:1)

如果您不关心它实际上是“资源”,只需要从嵌入到二进制文件中的文件中获取数据blob;看看“import expressions

答案 3 :(得分:0)

点击此处查看'VisualStyles'示例:https://github.com/AndrejMitrovic/DWinProgramming/tree/master/Samples/Extra

'ThemedSimpleWakeUp'示例使用资源文件,而'ThemedWakeUp'动态启用视觉样式。

答案 4 :(得分:0)

查看使用 dsss 的旧项目:

$cat dsss.conf

[*]
buildflags+=-Jresources

version(Windows) {
    version(gui) {
        buildflags+= -L/SUBSYSTEM:windows:5
    } else {
        buildflags+= -L/SUBSYSTEM:console:5
    }
    buildflags+= -L/rc:.\resources\dwt
    ...
}
...

这应该转化为:

dmd -JRES_PATH -L/rc:.\RES_PATH\MANIFEST_WHITHOUT_RES_EXT ...