代码之家  ›  专栏  ›  技术社区  ›  Tim Cooper

将用户32与GCC链接

  •  2
  • Tim Cooper  · 技术社区  · 14 年前

    我有一个C程序,它有一个函数调用,在 windows.h 但是,当我试图用 gcc ,我得到错误:

    warning: implicit declaration of function `LockWorkStation'
    

    我查看了msdn文档,发现此函数是 User32 库文件,我想知道如何将其链接到我的文件。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Hans Passant    14 年前

    LockWorkstation在Windows 2000及更高版本上可用。您必须声明要针对的Windows版本。让它看起来像这样:

    #define _WIN32_WINNT 0x500
    #include <windows.h>
    
        2
  •  2
  •   anon    14 年前

    我对gcc也有同样的问题,但这不是一个链接器错误。消息意味着winuser.h中没有函数的原型,或者更准确地说,编译器找不到这样的原型。这是因为winuser.h的相关位如下所示:

    #if (_WIN32_WINNT >= 0x0500)
    WINUSERAPI BOOL WINAPI LockWorkStation(void);
    #endif
    

    换句话说,您需要一个Windows版本>=5(即win2k)才能使用此函数。我目前正在Win2K上尝试此操作,但它不起作用,这表示宏设置不正确。这些天我没有做太多“真正的”Windows编程,所以我不知道为什么会这样。

    编辑: 事实上,一些实验表明GCC认为Win2K的Windows版本(至少在我的安装中)是0x0400。

    进一步: 实际上,宏 _WIN32_WINNT 是(作为主要的下划线建议)在C和C++中保留的名称,并且不应该在用户代码中定义。定义宏 WINVER 似乎也有同样的效果,而且(至少在概念上)更易于携带。此代码在我的GCC安装上编译:

    #define WINVER 0x0500
    #include <windows.h>
    int main() {
        LockWorkStation();
    }