CodeBlock 未定义引用 Windows API 函数,即使搜索目录已配置
CodeBlock undefined reference to Windows API function even though search directory is configured
我正在尝试使用带有 Code::Blocks 的 minGw 编译器编译一个小程序。我的程序如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main()
{
HWND hwnd = FindWindowA(NULL, "A Valid Window Title");
printf("Window Handle=%X\n", hwnd);
DWORD pid = 0;
GetWindowThreadProcessId(hwnd, &pid);
printf("PID=%d\n", pid);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
printf("Process HANLDE=%X\n", hProcess);
GetProcessId(hProcess);
CloseHandle(hProcess);
return 0;
}
但是,当我尝试编译时,Code::Blocks 会产生一个 undefined reference to GetProcessId
错误。如果我删除对 GetProcessId
的调用,程序会正常编译和运行。我认为此错误消息是由不正确的搜索路径引起的。所以我去我的设置并添加
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include
C:\Program Files (x86)\Windows Kits.1\Include\shared
C:\Program Files (x86)\Windows Kits.1\Include\um
到我的搜索目录。但这一次,Code::Blocks 会产生更多错误。我的第二个想法是,这可能是由某些链接错误引起的。所以我转到我的设置并明确地将 Kernel32.lib
和 User32.lib
添加到我的项目中。同样的错误仍然发生。更让我困惑的是,当我输入 GetProcessId
时,建议实际上出现了,表明有一个名为 GetProcessId
的函数
出现这种问题的原因是什么,我该如何解决?
GetProcessId
至少需要 Windows XP SP1。可以安全地假设没有人使用较旧的操作系统,因此您可以添加 #define WINVER 0x0501
来指示最低操作系统。将其放在文件的开头或所有 *.cpp 文件使用的某个 .h 文件中
#define WINVER 0x0501
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main()
{
...
}
已编辑----查看评论
我正在尝试使用带有 Code::Blocks 的 minGw 编译器编译一个小程序。我的程序如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main()
{
HWND hwnd = FindWindowA(NULL, "A Valid Window Title");
printf("Window Handle=%X\n", hwnd);
DWORD pid = 0;
GetWindowThreadProcessId(hwnd, &pid);
printf("PID=%d\n", pid);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
printf("Process HANLDE=%X\n", hProcess);
GetProcessId(hProcess);
CloseHandle(hProcess);
return 0;
}
但是,当我尝试编译时,Code::Blocks 会产生一个 undefined reference to GetProcessId
错误。如果我删除对 GetProcessId
的调用,程序会正常编译和运行。我认为此错误消息是由不正确的搜索路径引起的。所以我去我的设置并添加
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include
C:\Program Files (x86)\Windows Kits.1\Include\shared
C:\Program Files (x86)\Windows Kits.1\Include\um
到我的搜索目录。但这一次,Code::Blocks 会产生更多错误。我的第二个想法是,这可能是由某些链接错误引起的。所以我转到我的设置并明确地将 Kernel32.lib
和 User32.lib
添加到我的项目中。同样的错误仍然发生。更让我困惑的是,当我输入 GetProcessId
时,建议实际上出现了,表明有一个名为 GetProcessId
出现这种问题的原因是什么,我该如何解决?
GetProcessId
至少需要 Windows XP SP1。可以安全地假设没有人使用较旧的操作系统,因此您可以添加 #define WINVER 0x0501
来指示最低操作系统。将其放在文件的开头或所有 *.cpp 文件使用的某个 .h 文件中
#define WINVER 0x0501
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main()
{
...
}
已编辑----查看评论