elva

vc6.0,vs2003中,ado代码移植到vs2005,2008时遇到重定义问题的解决办法

vs2003中正常访问数据库的代码在vs2005或vs2008中编译报错如:



1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“wireHWND”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“_RemotableHandle”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“__MIDL_IWinTypes_0009”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“_COSERVERINFO”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“_COAUTHINFO”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“_COAUTHIDENTITY”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“IPersistFile”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“IPersist”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“IAuthenticate”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“IErrorInfo”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“IMarshal”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“IStream”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“ISequentialStream”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“_LARGE_INTEGER”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“_ULARGE_INTEGER”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“tagSTATSTG”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\stdafx.h(69) : warning C4192: 导入类型库“_FILETIME”时自动排除“C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll”
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(251) : error C2011: “IBindResource”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(13883) : 参见“IBindResource”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(289) : error C2011: “ICreateRow”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(14271) : 参见“ICreateRow”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(329) : error C2011: “IRegisterProvider”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(14637) : 参见“IRegisterProvider”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(369) : error C2011: “tagDBPROPIDSET”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(2295) : 参见“tagDBPROPIDSET”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(400) : error C2011: “tagDBID”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(695) : 参见“tagDBID”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(411) : error C2011: “tagDBPROP”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(2394) : 参见“tagDBPROP”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(424) : error C2011: “tagDBPROPSET”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(2403) : 参见“tagDBPROPSET”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(435) : error C2011: “tagDBPROPINFO”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(2345) : 参见“tagDBPROPINFO”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(448) : error C2011: “tagDBPROPINFOSET”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(2356) : 参见“tagDBPROPINFOSET”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(457) : error C2011: “IDBProperties”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(7883) : 参见“IDBProperties”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tlh(515) : error C2011: “IDBBinderProperties”: “struct”类型重定义
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(14390) : 参见“IDBBinderProperties”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(100) : error C2027: 使用了未定义类型“IBindResource”
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(13883) : 参见“IBindResource”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(101) : error C3861: “raw_RemoteBind”: 找不到标识符
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(102) : error C2673: “RemoteBind”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(102) : error C2673: “RemoteBind”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(110) : error C2027: 使用了未定义类型“ICreateRow”
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(14271) : 参见“ICreateRow”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(111) : error C3861: “raw_RemoteCreateRow”: 找不到标识符
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(112) : error C2673: “RemoteCreateRow”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(112) : error C2673: “RemoteCreateRow”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(120) : error C2027: 使用了未定义类型“IRegisterProvider”
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(14637) : 参见“IRegisterProvider”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(121) : error C3861: “raw_RemoteGetURLMapping”: 找不到标识符
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(122) : error C2673: “RemoteGetURLMapping”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(122) : error C2673: “RemoteGetURLMapping”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(126) : error C2027: 使用了未定义类型“IRegisterProvider”
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(14637) : 参见“IRegisterProvider”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(127) : error C3861: “raw_SetURLMapping”: 找不到标识符
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(128) : error C2673: “SetURLMapping”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(128) : error C2673: “SetURLMapping”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(132) : error C2027: 使用了未定义类型“IRegisterProvider”
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(14637) : 参见“IRegisterProvider”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(133) : error C3861: “raw_UnregisterProvider”: 找不到标识符
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(134) : error C2673: “UnregisterProvider”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(134) : error C2673: “UnregisterProvider”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(142) : error C2027: 使用了未定义类型“IDBProperties”
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(7883) : 参见“IDBProperties”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(143) : error C3861: “raw_RemoteGetProperties”: 找不到标识符
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(144) : error C2673: “RemoteGetProperties”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(144) : error C2673: “RemoteGetProperties”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(148) : error C2027: 使用了未定义类型“IDBProperties”
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(7883) : 参见“IDBProperties”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(149) : error C3861: “raw_RemoteGetPropertyInfo”: 找不到标识符
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(150) : error C2673: “RemoteGetPropertyInfo”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(150) : error C2673: “RemoteGetPropertyInfo”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(154) : error C2027: 使用了未定义类型“IDBProperties”
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(7883) : 参见“IDBProperties”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(155) : error C3861: “raw_RemoteSetProperties”: 找不到标识符
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(156) : error C2673: “RemoteSetProperties”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(156) : error C2673: “RemoteSetProperties”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(164) : error C2027: 使用了未定义类型“IDBBinderProperties”
1>        d:\program files\microsoft visual studio 8\vc\platformsdk\include\oledb.h(14390) : 参见“IDBBinderProperties”的声明
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(165) : error C3861: “raw_Reset”: 找不到标识符
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(166) : error C2673: “Reset”: 全局函数没有“this”指针
1>c:\users\elva\desktop\serialnumberwriter\trunk\debug\oledb32.tli(166) : error C2673: “Reset”: 全局函数没有“this”指针


该错误由以下语句导致:
#define _WIN32_DCOM 
#import 
"C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","ADOEOF")
#import 
"C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll" no_namespace

解决办法是去掉no_namespace,在用到的地方单独加namespace

using namespace ADODB;
另一个不知道是什么,
我只好将他改名:
#import "C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll" rename_namespace("OLEDB"// no_namespace

posted on 2010-04-27 14:03 叶子 阅读(2327) 评论(0)  编辑 收藏 引用 所属分类: C\C++


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理