【问题标题】:Getting screen resolution in C, w/o "windows.h"在 C 中获取屏幕分辨率,不带“windows.h”
【发布时间】:2018-11-21 09:33:36
【问题描述】:

只是在使用 SDL2 做一个小项目...

系统信息:Windows

应用信息:使用 C(纯 C,无 c++)、mingw-x64 和 SDL2。

现在;

首先,SDL.h 要求将main 函数重命名为WinMain

另一方面,在获取屏幕分辨率时,我倾向于使用GetSystemMetrics 函数,它要求将windows.h 包含在预处理器部分中,此时,WinMain 在我的代码冲突中WinMain 之前在 winbase.h 中声明。当我同时使用(SDL.hwindows.h)时,编译器会响应:

'WinMain' 的先前声明在这里:int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);

这是因为,WinMainwinbase.h 中的某处声明,它是通过 windows.h 自动包含的。

有没有办法使用GetSystemMetrics / windows.h 来获得屏幕分辨率?还有其他想法吗?

【问题讨论】:

  • SDL.h 要求将 main 函数重命名为 WinMain 这不是真的。如果您将main()WinMain() 作为程序的入口点,则取决于您为哪个Windows 子系统编写代码(CONSOLE 或WINDOWS(或其他与此无关的))。此外,简单地将main() 重命名为WinMain() 将不起作用,因为两者都采用不同的参数。您收到的错误消息告诉您。你对WinMain() 的定义是怎样的?
  • 完全没有要求#include windows.h 也需要WinMain()。例如,在从 main() 开始的控制台应用程序中使用 winapi 工作得很好,包括 GetSystemMetrics()。很难猜出这列火车是如何从铁轨上跳下来的。但是你当然需要删除你的 WinMain() 函数,SDL 已经处理好了。
  • @Swordfish :使用main 时,编译器会抱怨WinMain 找不到。不记得确切的地址,但在网络上的某个地方,我通过将main 替换为WinMain 来解决这个问题。试一试……这解决了我的问题——虽然不确定内部结构。无论如何,SDL_GetDesktopDisplayMode 似乎解决了我的问题。非常感谢!

标签: c sdl-2 mingw-w64


【解决方案1】:

好的!我已经意识到我做错了什么......

在链接阶段,我使用了以下库,链接器抱怨找不到 WinMain 函数。

-lSDL2main
-lSDL2

然后我添加了 mingw32 库,如下所示,问题得到解决(我认为库的顺序很重要)。

-lmingw32
-lSDL2main
-lSDL2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多