【问题标题】:How can I add resources into my D executable? How to embed a manifest?如何将资源添加到我的 D 可执行文件中?如何嵌入清单?
【发布时间】:2012-09-05 19:45:22
【问题描述】:

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

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

【问题讨论】:

    标签: winapi button resources manifest d


    【解决方案1】:

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

    dmd.exe main.d manifest.res
    

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

    【讨论】:

      【解决方案2】:

      有点难看,但它可以完成工作,没有清单:

      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);
      }
      

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

      【讨论】:

      • 根据问题包含清单资源要好得多。
      • @David 如果它有效,那对我来说很好。我会试一试。 :)
      • @Mehrdad 你导入什么来获得ACTCTX 和其他类似符号的定义? d 是否有一些公开的完整 winapi 导入模块?
      • 等到您在 Windows 版本上运行,该版本没有您在 shell32.dll 中 ID 124 查找的资源。那么你会后悔你的决定。
      • 是的,我刚刚发现了这一点。这个神奇的数字是从哪里来的?
      【解决方案3】:

      如果您不关心它实际上是一个“资源”,而只需要来自嵌入二进制文件的文件中的数据块;看看“import expressions

      【讨论】:

      • 导入表达式对于解决一般资源问题非常有用。对于我的特殊问题,不幸的是它们没有帮助。
      【解决方案4】:

      在此处查看“VisualStyles”示例:https://github.com/AndrejMitrovic/DWinProgramming/tree/master/Samples/Extra

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

      【讨论】:

        【解决方案5】:

        查看使用 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 ...
        

        【讨论】:

          猜你喜欢
          • 2023-04-06
          • 1970-01-01
          • 2010-11-28
          • 1970-01-01
          • 2017-06-26
          • 1970-01-01
          • 1970-01-01
          • 2011-11-09
          相关资源
          最近更新 更多