【发布时间】: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.h 和 windows.h)时,编译器会响应:
'WinMain' 的先前声明在这里:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
这是因为,WinMain 在 winbase.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似乎解决了我的问题。非常感谢!