使用GCC连接Win32 API时遇到ComCtl32问题

5

我可以帮助您翻译这段内容,它与IT技术有关。您需要使用GCC(MinGW)将Comctl32.lib链接到您的程序中,但是遇到了问题。

GCC输入:

gcc -o program.exe main.c images.o -lgdi32 -lcomctl32 -mwindows

GCC输出

main.c: In function 'WinMain':
main.c:120:2: error: unknown type name 'INITCOMMONCONTROLSEX'
main.c:124:9: error: request for member 'dwICC' in something not a structure or union

在main.c中相关代码

#define _WIN32_WINNT _WIN32_WINNT_WIN7
#include <windows.h>
#include <commctrl.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmd)
{
   Line 120: INITCOMMONCONTROLSEX icex;
   Line 124: icex.dwICC = ICC_LISTVIEW_CLASSES;
   InitCommonControlsEx(&icex);
}

感谢您能提供任何帮助或信息。我已经花费了太长时间,但仍无法得出答案。

2
你不需要像这样定义:http://msdn.microsoft.com/en-us/library/6sehtctf.aspx吗? - David Heffernan
1
我不这么认为。我已将其更改为0x0601并添加了WINVER。我相信这只是一个链接器问题,与定义无关。 - David
解决了,这让我找到了问题所在。 - David
干得好。我知道它会是那种东西。 - David Heffernan
给那些正在寻找的人一个提示:可能是显而易见的(并且在这种情况下不是问题),但命令行中列出对象的顺序是相关的;-lcomctl32 必须跟在main.c之后。 - soulseekah
1个回答

4
我已经通过David H.的帮助解决了这个问题。我必须定义。
#define _WIN32_IE 0x0900

我曾认为commctrl.h默认定义0x0500(我的函数需要0x0300),但似乎并非如此。
如果您在项目中未定义_WIN32_IE宏,它将自动定义为0x0500。- MSDN Source

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接