找不到Win32 API函数

我在Windows 7 Ultimate 32位上使用DevC ++,并且在我的程序中包含了windows.h和psapi.h。 到目前为止,我所使用的所有Windows API都在工作,除了GetProcessId和DebugActiveProcessStop。 编译器在两种情况下返回指定的函数未声明。 但是,当我在winbase.h中看,我可以清楚地看到GetProcessId被声明。 即使将鼠标hover在该function上,也会显示结构信息。 那么,为什么编译器不能识别这两个函数呢?

Solutions Collecting From Web of "找不到Win32 API函数"

使用Win32 API标头时,您需要指定您的操作系统的目标版本。 这是在MSDN库中记录 。

现在,你应该通过定义NTDDI_VERSION来做到这一点。 如果您检查GetProcessId的文档,您会注意到它需要Windows XP SP1,所以您至少需要指定NTDDI_WINXPSP1作为目标操作系统版本。 事实上,由于SP1不再支持,所以使用SP2可能会更好:

#define NTDDI_VERSION 0x05010200 

在过去,我发现定义NTDDI_VERSION并不总是按预期的那样工作,尽管希望大部分的小问题现在已经被解决了。 如果它不起作用,请尝试使用旧的宏_WIN32_WINNT,这也在上面给出的链接中有记录。 在这种情况下,你想要:

 #define _WIN32_WINNT 0x0502 

如果以后需要使用Vista或Windows 7中引入的函数,请适当更改NTDDI_VERSION或_WIN32_WINNT的值。 每个函数的MSDN库文档都说明了它所引入的操作系统版本。

当你在windows api中编码时,有时会弹出这个问题。 您可以看到该函数在头文件中,但由于某种原因,您的编译器不同意。 当你遇到这个问题时,在头文件中找到这个函数,然后在它周围寻找预处理指令。 您可能需要定义一些东西才能使用该功能。

在这种情况下,我发现你遇到的问题是:

  #if (_WIN32_WINNT >= 0x0501) WINBASEAPI DWORD WINAPI GetProcessId(HANDLE); #endif 

  #if (_WIN32_WINNT >= 0x0501) WINBASEAPI BOOL WINAPI DebugActiveProcessStop(DWORD); #endif 

所以,在你的主代码文件中,包含windows头文件的地方,在你包含windows头文件之前,先把这个定义放在这里:

  #define _WIN32_WINNT 0x0501 

这应该可以解决你的问题。 祝你好运^ _ ^