请问一个windows祖传项目,只要#include <winsock2.h>就会出现 GetSystemTime / HANDLE 链接出错,
因为我的项目已经定义了这两个了,和windows sdk里面定义冲突,
现在我批量修改祖传项目里面的GetSystemTime / HANDLE 可以编译链接成功,
但是要改动的地方太多了,怕接手的同事揍我,
请问还有其他办法吗?
离线
截图下跑错内容?
离线
都是类型定义冲突
离线
头文件一个个去掉,变一变前后顺序
离线
用宏把自己项目的GetSystemTime / HANDLE指向自己的类型
离线
因为pre compile比判断类型先执行就不会报错了,编译自己的文件的参数里加-D,编译库的文件别加
离线
感谢楼上两位大佬,折腾半天还是没搞定,看来只能做好被揍的准备。
离线
关键不是定义冲突,而是你要使用哪一个的问题。
1)如果使用windows sdk的API,就把你项目中的这两个定义去掉。
2)如果是使用项目中原来的定义,那就要注意包含winsock2.h的文件不能包含项目的头文件。
离线
关键不是定义冲突,而是你要使用哪一个的问题。
1)如果使用windows sdk的API,就把你项目中的这两个定义去掉。
2)如果是使用项目中原来的定义,那就要注意包含winsock2.h的文件不能包含项目的头文件。
感谢大佬回复,api的不敢随便改,我把应用程序里面的定义批量替换了,希望接手祖传代码的同事不要骂我。svn的log我已经写得很详细了。
离线
这个只能采用隔离方案了。
假设你在用QT。
用到WinSocket的地方不要包含QT的东西,在一个单独的文件里使用WinSocket的功能,然后QT那边调用这个文件里面的函数。
mysocket.h
extern int MyWSAStartup(void);
mysocket.cpp
#include <winsock2.h>
int MyWSAStartup(void)
{
return WSAStartup(0, NULL);
);
离线
@novice 这个办法挺好的,感谢分享,晚点我试一试
离线
那就建议你采用方法2)包含winsock2.h的模块不能包含你Qt项目那一套东西,该模块独立封装好再使用。
JasonWoo 说:关键不是定义冲突,而是你要使用哪一个的问题。
1)如果使用windows sdk的API,就把你项目中的这两个定义去掉。
2)如果是使用项目中原来的定义,那就要注意包含winsock2.h的文件不能包含项目的头文件。感谢大佬回复,api的不敢随便改,我把应用程序里面的定义批量替换了,希望接手祖传代码的同事不要骂我。svn的log我已经写得很详细了。
离线