【问题标题】:Create Win32 window without WinMain function [duplicate]创建没有 WinMain 功能的 Win32 窗口[重复]
【发布时间】:2014-08-21 16:55:02
【问题描述】:

我想在windows上为我写一个OpenGL的小窗口框架。 我知道有很多好的窗口库,但我喜欢自己做。 但是我有一个小问题,如果我想用 Win32 API 创建一个窗口,我需要像“hInstance”这样的参数...... 我如何在 Window.class 中获得所需的变量? 其他 Window 库是如何做到的?

【问题讨论】:

  • 我可能错过了问题的重点,但是有什么东西阻止您通过提供所需的数据来要求您的库的“客户端”启动设置步骤,例如hInstance 的模块?
  • 所有WinMain 参数均可用,无需WinMain -- stackoverflow.com/a/25250854/103167

标签: c++ winapi window


【解决方案1】:

您可以使用GetModuleHandle(0); 获取程序hInstance。只需将 0 作为 hInstance 参数传递给我。

“传递 0 检索调用 进程 的句柄,而不是调用 模块。如果库/框架被实现为 DLL,您最终会得到句柄错误。请改用传递给DllMain()DllEntryPoint() 的句柄。– Remy Lebeau"

【讨论】:

  • 传递 0 检索调用 进程 的句柄,而不是调用 模块。如果库/框架是作为 DLL 实现的,您最终会得到错误的句柄。请改用传递给DllMain()DllEntryPoint() 的句柄。
  • 当您链接到的文档解释了传递 0 时会发生什么时,说“为我工作”是没有意义的:如果此参数为 NULL,GetModuleHandle 返回用于创建调用进程(.exe 文件)。
  • @chris 我的意思是作为 hInstance 参数,而不是作为 GetModuleHandle 的参数。我进行了编辑以明确这一点。
  • stackoverflow.com/a/11785762/1462718 @OP 没有提到它们的框架在 dll 中。他们也没有标记 dll 或动态链接库。假设他们只是将 winmain 替换为 main 是安全的,因此 GetModuleHandle(0) 可以用于此目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 2011-07-01
  • 1970-01-01
相关资源
最近更新 更多