【问题标题】:Win32 API Functions not Found未找到 Win32 API 函数
【发布时间】:2012-03-27 10:37:16
【问题描述】:

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

【问题讨论】:

  • 它可能被预编译器指令排除在外。你检查了吗?
  • 除非你需要使用 Dev-C++,否则我会考虑仔细注意Dev-C++ tag wiki 的内容。
  • 事后考虑:在 Windows SDK v7.0A 中,GetProcessId 和 DebugActiveProcessStop 都不是有条件的,可能是因为 Windows 2000 和 XP Gold 现在都不支持了。所以看起来您的 SDK 标头可能已经过时了。

标签: c++ windows dev-c++


【解决方案1】:

使用 Win32 API 标头时,您需要指定所针对的操作系统版本。这在MSDN library 中有记录。

现在,您应该通过定义 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 库文档说明了它是在哪个版本的操作系统中引入的。

【讨论】:

    【解决方案2】:

    当您在 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
    

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

    【讨论】:

    • 如果这不能解决问题(我认为应该),那么我会确保您没有从链接器设置中删除 kernel32.lib。
    • @druciferre 这不会导致一堆链接器错误吗?
    • 他没有发布确切的错误,因此可能是链接器错误。此外,他从未明确表示这是 only 错误。我愿意打赌_WIN32_WINNT 的定义是根本原因。但我想我会添加评论,以防万一。
    • 是的,这修复了 DebugActiveProcessStop 错误,但我仍然收到错误:76 C:\Users\Administrator\Desktop\C++\test.cpp `GetProcessId' undeclared(首先使用此函数)跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多