VC6.0代码的移植到VS2008出错

时间:2021-09-22 06:35:38
在VC6.0下开发的项目加载到VS2008下出现了很多错误,其中之一:
c:\program files\microsoft sdks\windows\v6.0a\include\winreg.h(544) : error C2061: 语法错误 : 标识符“__out_data_source”
1>c:\program files\microsoft sdks\windows\v6.0a\include\winreg.h(546) : error C2059: 语法错误 : “)”
1>c:\program files\microsoft sdks\windows\v6.0a\include\winreg.h(546) : error C2143: 语法错误 : 缺少“)”(在“;”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\winreg.h(557) : error C2061: 语法错误 : 标识符“__out_data_source”
1>c:\program files\microsoft sdks\windows\v6.0a\include\winreg.h(559) : error C2059: 语法错误 : “)”
1>c:\program files\microsoft sdks\windows\v6.0a\include\winreg.h(559) : error C2143: 语法错误 : 缺少“)”(在“;”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\winreg.h(740) : error C2061: 语法错误 : 标识符“__out_data_source”
1>c:\program files\microsoft sdks\windows\v6.0a\include\winreg.h(742) : error C2059: 语法错误 : “)”
1>c:\program files\microsoft sdks\windows\v6.0a\include\winreg.h(742) : error C2143: 语法错误 : 缺少“)”(在“;”的前面)
...................................以及:
1>c:\program files\microsoft sdks\windows\v6.0a\include\propidl.h(559) : error C2061: 语法错误 : 标识符“__RPC__in_ecount_full”
1>c:\program files\microsoft sdks\windows\v6.0a\include\propidl.h(560) : error C2059: 语法错误 : “)”
...................................等等;
如上面两种的错误;

如何解决呢?各位高帅富各抒己见呀!

14 个解决方案

#1


winreg.h是什么东东

#2


winreg.h好像是VC自带的系统文件,可能与注册表有关

#3


你把这个winreg.h头文件注释掉,加上include "windows.h"试试

#4


也可能是文件包含的顺序造成的

#5


在winreg.h之前包含specstrings.h

#6


引用 3 楼  的回复:
你把这个winreg.h头文件注释掉,加上include "windows.h"试试


这个不行呀,已经包含windows.h了,而且我的这个项目中没有显示的声明包含winreg.h这个头文件,但是编译的时候就是会出错呀

#7


引用 4 楼  的回复:
也可能是文件包含的顺序造成的


可是顺序该如何调呢?头文件的顺序放置应该是有一定的规则的,但这些规则是什么呢?请4楼学长知道的话,不吝赐教呀!

#8


引用 5 楼  的回复:
在winreg.h之前包含specstrings.h


5楼的学长实为正解呀,太感激了,麻烦说说原因吧,为什么只要先包含了specstrings.h,就可以解决winreg.h的错误呢?

winreg.h的问题已经解决了,但是propidl.h中的问题仍然存在,该如何办呢?各位学长不吝赐教呀!

#9


你这里的问题其实就是解决__out_data_source定义的问题
关于propidl.h在其前包含rpcsal.h

#10


错误多到不正常的好多都是头文件包含的问题

#11


引用 9 楼  的回复:
你这里的问题其实就是解决__out_data_source定义的问题
关于propidl.h在其前包含rpcsal.h


学长,包含rpcsal.h,没有解决问题,我的项目中没有显式的包含propidl.h,所以也可能是我把rpcsal.h放错地方了,我是把它放在预编译头文件stdafx.h中的,因为我发现所有的.cpp文件都包含它,所以我把它放在那里的,这样对吗?我解决winreg.h中的问题也是把specstrings.h放在stdafx.h中的。

而且,各个头文件的放置顺序有什么讲究呢?请xianglitian学长解答一下呀!

#12


看看propidl.h是被谁包含的
把rpcsal.h包含在那个文件前面
头文件顺序就是要把定义的东西放到前面
否则就会出现你这里的无定义的问题

#13


跨度太大,真不如重写。。。

#14


谢谢 xianglitian 大哥,也非常的感谢各位学长的热心帮助,问题终于解决了,我把rpcsal.h再放到propidl.h之前就解决了,可是我一直都搞不明白为什么在VC6下的代码一放到VS2008下就出现这样的问题,那个代码如下:

#include"rpcsal.h"
#include"specstrings.h"
#include <windows.h>

而VC6中前两句都是不需要的呀!求解惑呀!谢谢各位学长、学姐!
是不是以后所有开发win32项目一旦需要包含windows.h文件都要首先包含前两个文件呀?谢谢

#1


winreg.h是什么东东

#2


winreg.h好像是VC自带的系统文件,可能与注册表有关

#3


你把这个winreg.h头文件注释掉,加上include "windows.h"试试

#4


也可能是文件包含的顺序造成的

#5


在winreg.h之前包含specstrings.h

#6


引用 3 楼  的回复:
你把这个winreg.h头文件注释掉,加上include "windows.h"试试


这个不行呀,已经包含windows.h了,而且我的这个项目中没有显示的声明包含winreg.h这个头文件,但是编译的时候就是会出错呀

#7


引用 4 楼  的回复:
也可能是文件包含的顺序造成的


可是顺序该如何调呢?头文件的顺序放置应该是有一定的规则的,但这些规则是什么呢?请4楼学长知道的话,不吝赐教呀!

#8


引用 5 楼  的回复:
在winreg.h之前包含specstrings.h


5楼的学长实为正解呀,太感激了,麻烦说说原因吧,为什么只要先包含了specstrings.h,就可以解决winreg.h的错误呢?

winreg.h的问题已经解决了,但是propidl.h中的问题仍然存在,该如何办呢?各位学长不吝赐教呀!

#9


你这里的问题其实就是解决__out_data_source定义的问题
关于propidl.h在其前包含rpcsal.h

#10


错误多到不正常的好多都是头文件包含的问题

#11


引用 9 楼  的回复:
你这里的问题其实就是解决__out_data_source定义的问题
关于propidl.h在其前包含rpcsal.h


学长,包含rpcsal.h,没有解决问题,我的项目中没有显式的包含propidl.h,所以也可能是我把rpcsal.h放错地方了,我是把它放在预编译头文件stdafx.h中的,因为我发现所有的.cpp文件都包含它,所以我把它放在那里的,这样对吗?我解决winreg.h中的问题也是把specstrings.h放在stdafx.h中的。

而且,各个头文件的放置顺序有什么讲究呢?请xianglitian学长解答一下呀!

#12


看看propidl.h是被谁包含的
把rpcsal.h包含在那个文件前面
头文件顺序就是要把定义的东西放到前面
否则就会出现你这里的无定义的问题

#13


跨度太大,真不如重写。。。

#14


谢谢 xianglitian 大哥,也非常的感谢各位学长的热心帮助,问题终于解决了,我把rpcsal.h再放到propidl.h之前就解决了,可是我一直都搞不明白为什么在VC6下的代码一放到VS2008下就出现这样的问题,那个代码如下:

#include"rpcsal.h"
#include"specstrings.h"
#include <windows.h>

而VC6中前两句都是不需要的呀!求解惑呀!谢谢各位学长、学姐!
是不是以后所有开发win32项目一旦需要包含windows.h文件都要首先包含前两个文件呀?谢谢