您尚未登录。

楼主 #1 2021-03-24 13:53:33

奔跑的孩子
会员
注册时间: 2021-01-28
已发帖子: 51
积分: 31.5

请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

请问一个windows祖传项目,只要#include <winsock2.h>就会出现 GetSystemTime / HANDLE 链接出错,

因为我的项目已经定义了这两个了,和windows sdk里面定义冲突,

现在我批量修改祖传项目里面的GetSystemTime / HANDLE 可以编译链接成功,

但是要改动的地方太多了,怕接手的同事揍我,

请问还有其他办法吗?

离线

#2 2021-03-24 14:29:05

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 259
积分: 137.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

截图下跑错内容?

离线

楼主 #3 2021-03-24 14:39:41

奔跑的孩子
会员
注册时间: 2021-01-28
已发帖子: 51
积分: 31.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

45362ea6a6dd339a.jpg

46d898716a516c5.jpg

都是类型定义冲突

离线

#4 2021-03-24 14:45:37

rongwinzip
会员
注册时间: 2020-03-14
已发帖子: 49
积分: 2.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

头文件一个个去掉,变一变前后顺序

离线

#5 2021-03-24 14:46:50

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 259
积分: 137.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

用宏把自己项目的GetSystemTime / HANDLE指向自己的类型

离线

#6 2021-03-24 14:48:02

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 259
积分: 137.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

因为pre compile比判断类型先执行就不会报错了,编译自己的文件的参数里加-D,编译库的文件别加

离线

楼主 #7 2021-03-24 15:00:55

奔跑的孩子
会员
注册时间: 2021-01-28
已发帖子: 51
积分: 31.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

感谢楼上两位大佬,折腾半天还是没搞定,看来只能做好被揍的准备。

离线

#8 2021-03-24 16:59:05

JasonWoo
会员
注册时间: 2019-06-04
已发帖子: 84
积分: 55.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

关键不是定义冲突,而是你要使用哪一个的问题。
1)如果使用windows sdk的API,就把你项目中的这两个定义去掉。
2)如果是使用项目中原来的定义,那就要注意包含winsock2.h的文件不能包含项目的头文件。

离线

楼主 #9 2021-03-24 17:50:29

奔跑的孩子
会员
注册时间: 2021-01-28
已发帖子: 51
积分: 31.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

JasonWoo 说:

关键不是定义冲突,而是你要使用哪一个的问题。
1)如果使用windows sdk的API,就把你项目中的这两个定义去掉。
2)如果是使用项目中原来的定义,那就要注意包含winsock2.h的文件不能包含项目的头文件。

感谢大佬回复,api的不敢随便改,我把应用程序里面的定义批量替换了,希望接手祖传代码的同事不要骂我。svn的log我已经写得很详细了。

离线

#10 2021-03-24 19:00:31

novice
会员
注册时间: 2019-07-26
已发帖子: 112
积分: 93

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

这个只能采用隔离方案了。
假设你在用QT。

用到WinSocket的地方不要包含QT的东西,在一个单独的文件里使用WinSocket的功能,然后QT那边调用这个文件里面的函数。

mysocket.h
extern int MyWSAStartup(void);

mysocket.cpp
#include <winsock2.h>
int MyWSAStartup(void)
{
    return WSAStartup(0, NULL);
);

离线

楼主 #11 2021-03-24 20:15:48

奔跑的孩子
会员
注册时间: 2021-01-28
已发帖子: 51
积分: 31.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

@novice 这个办法挺好的,感谢分享,晚点我试一试

离线

#12 2021-03-25 11:21:56

JasonWoo
会员
注册时间: 2019-06-04
已发帖子: 84
积分: 55.5

Re: 请问一个windows祖传项目,只要include winsock2.h就会出现 GetSystemTime / HANDLE 链接出错

那就建议你采用方法2)包含winsock2.h的模块不能包含你Qt项目那一套东西,该模块独立封装好再使用。

奔跑的孩子 说:
JasonWoo 说:

关键不是定义冲突,而是你要使用哪一个的问题。
1)如果使用windows sdk的API,就把你项目中的这两个定义去掉。
2)如果是使用项目中原来的定义,那就要注意包含winsock2.h的文件不能包含项目的头文件。

感谢大佬回复,api的不敢随便改,我把应用程序里面的定义批量替换了,希望接手祖传代码的同事不要骂我。svn的log我已经写得很详细了。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn