0

简而言之,我想制作一个嵌入视觉样式清单和链接到ComCtl32.lib版本 6(如果可用)的函数。这基本上是我希望做的:

void InitVivify() {
    // Embed visual style XML manifest
    #pragma comment(linker,                           \
        "\"/manifestdependency:type='Win32'"          \
        "   name='Microsoft.Windows.Common-Controls'" \
        "   version='6.0.0.0'"                        \
        "   processorArchitecture='*'"                \
        "   publicKeyToken='6595b64144ccf1df'"        \
        "   language='*'\""                           \
    )

    // Link common controls library
    #pragma comment(lib, "ComCtl32.lib")

    // Initialize controls used
    INITCOMMONCONTROLSEX InitCtrlEx;
    InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
    InitCtrlEx.dwICC = ICC_LISTVIEW_CLASSES | ICC_TAB_CLASSES | ICC_USEREX_CLASSES;
    InitCommonControlsEx(&InitCtrlEx);
}

我意识到这可能不是好的做法,但它有效吗?

4

1 回答 1

4

Pragma 指令是预处理器指令。
它们导致实现以实现定义的方式运行。
所以它是有效的,但不被鼓励。

C++11 标准:

16.6 Pragma 指令 [cpp.pragma]

1 形式的预处理指令

# pragma pp-tokensopt new-line

导致实现以实现定义的方式运行。该行为可能会导致翻译失败或导致翻译器或生成的程序以不合格的方式运行。任何未被实现识别的编译指示都会被忽略。

于 2012-10-05T08:56:12.310 回答