首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接User32与gcc

链接User32与gcc
EN

Stack Overflow用户
提问于 2010-04-05 02:38:50
回答 2查看 1.1K关注 0票数 2

我有一个C程序,它有一个在windows.h中定义的函数调用(我已经包含了它),但是,当我尝试用gcc编译它时,我得到了错误:

代码语言:javascript
复制
warning: implicit declaration of function `LockWorkStation'

我看了MSDN文档,发现这个函数是User32库文件,我想知道如何将它链接到我的文件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-05 02:57:27

LockWorkstation在Windows2000及更高版本上可用。您必须声明目标Windows的版本。使其看起来像这样:

代码语言:javascript
复制
#define _WIN32_WINNT 0x500
#include <windows.h>
票数 4
EN

Stack Overflow用户

发布于 2010-04-05 02:58:36

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

代码语言:javascript
复制
#if (_WIN32_WINNT >= 0x0500)
WINUSERAPI BOOL WINAPI LockWorkStation(void);
#endif

换句话说,你需要一个版本的WindowsWindows5(即Win2K)才能使用这个功能。我目前正在Win2K上尝试,但它不起作用,这表明宏没有正确设置。这些天我不太“真正”地进行Windows编程,所以我不确定为什么会这样。

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

更进一步:实际上,宏_WIN32_WINNT (如前导下划线所示)是C和C++中的保留名称,不应在用户代码中定义。定义宏WINVER似乎也有同样的效果,而且(至少在概念上)更容易移植。这段代码是在我安装的gcc上编译的:

代码语言:javascript
复制
#define WINVER 0x0500
#include <windows.h>
int main() {
    LockWorkStation();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2575478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档