【问题标题】:"identifier "hInstance" is undefined" and "too few arguments in function call" [closed]“标识符“hInstance”未定义”和“函数调用中的参数太少”[关闭]
【发布时间】:2022-01-25 13:43:47
【问题描述】:

我正在尝试使用 C++ 创建一个窗口,但它给了我这个错误。

    m_hWnd = CreateWindowEx(
        0,
        CLASS_NAME,
        L"Window",
        style,
        rect.top,
        rect.right - rect.left,
        rect.bottom - rect.top,
        NULL,
        NULL,
        hInstance, // first error line is here
        NULL
    ); // second error line is here

第一个错误行告诉我identifier "hInstance" is undefined,而我之前多次使用它并没有给我一个错误,第二个错误告诉我too few arguments in function call

【问题讨论】:

  • 给定当前代码,错误是正确的。您没有在显示的代码中声明名为 hInstance 的变量。
  • 您使用hInstance“之前”的地方可能与您在此处尝试使用它的范围不同。

标签: c++ winapi compiler-errors scope arguments


【解决方案1】:

该函数需要 12 个参数而不是 11 个。您似乎忘记指定参数了

rect.left,

与参数配对

rect.top,

至于第二个错误,那么你应该检查hInstance的声明是否在函数调用点可见。

您可以使用表达式GetModuleHandle(NULL),而不是hInstance

【讨论】:

  • "您可以使用表达式 GetModuleHandle(NULL)" 而不是 hInstance,除非此代码在 DLL 中,否则您不能。您必须使用拥有代码的模块的句柄。在 DLL 中,使用提供给 DllMain()/DllEntryPoint() 的模块句柄来注册和创建窗口类。
  • @RemyLebeau 你的意思是“除非这段代码在 EXE 中,否则你不能。”
  • @RaymondChen 不,我的意思是我说的:“使用 [GetModuleHandle(NULL)] ... 除非代码在 DLL 中,否则 [请改用 DllMain 参数]。 " 在 DLL 中调用 GetModuleHandle(NULL) 会获取加载 DLL 的 EXE 的模块句柄,这是注册和注册时使用的错误句柄从 DLL 中创建窗口类。你自己wrote about that.
  • @RemyLebeau 啊,现在我明白了。你的回答模棱两可。我将其解析为对上一句的回应:“除非您在 DLL 中,否则您不能使用 GMH(NULL)。”但是您打算将其解析为上一句的延续:“您可以使用 GMH(NULL),除非您在 DLL 中,在这种情况下您不能。”
  • @RaymondChen 是的,没错
猜你喜欢
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 2012-10-23
相关资源
最近更新 更多