如何使用VSbit Ultimate在32位XP Sp3上解决构建错误

时间:2010-09-28 15:29:25

标签: visual-studio-2010 windows-xp-sp3

在我的桌面工作站上安装了VS2010 Ultimate - Dell Precision T3500(Windows 7 64位操作系统)和我的IBM ThinkPad R51(Windows XP Sp3 32位)。

我在StinkPad上构建解决方案时遇到问题,无法弄清楚原因。如下所示,编译器构建的ADO库的构建输出列出了以下错误:

c:\ wpds \ debug \ msjro.tlh(196):错误C2146:语法错误:缺少';'在标识符'ConflictTables'之前 c:\ wpds \ debug \ msjro.tlh(196):错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ wpds \ debug \ msjro.tlh(196):错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ wpds \ debug \ msjro.tlh(224):错误C2146:语法错误:缺少';'在标识符“GetConflictTables”之前 c:\ wpds \ debug \ msjro.tlh(224):错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int

我已经检查过以确保所有项目和解决方案的所有include,exe和library路径都是正确的。任何见解将不胜感激。 谢谢 比尔

2 个答案:

答案 0 :(得分:2)

第一次使用新版本的msado15.dll进行编译时遇到了同样的问题。 msado15.com和msjro.dll之间存在依赖关系,这可以通过msjro.tlb顶部的这些行来证明:

// Cross-referenced type libraries:
//
//  #import "C:\Program Files (x86)\Common Files\System\ado\msado15.dll"
//

在我的情况下,问题出现了,因为我在Windows 7上构建我的应用程序,而SP1 update includes a breaking change in msado15.dll将导致应用程序在Windows XP上失败。当我使用this KB修复此问题时,我的msado dll问题已得到修复,但我的msjro.tlb已停止编译。 可能有一种方法可以更新msjro以引用所需/正确的msado(在我的情况下,安装在KB中的msado60_Backcompat.tlb),但是如果你使用的是ado2.cpp和ado2.h中定义的CADODatabase classes ,如果您没有使用特定于喷气机的功能,更简单的解决方法是只注释掉参考喷气机的ado2.h和ado2.cpp的部分。
我刚刚在ado2.h中注释掉了这一行:

//#import <MSJRO.DLL> no_namespace rename("ReplicaTypeEnum", "_ReplicaTypeEnum") 

并且#ifdef出了ado2.cpp中所有CJetEngine方法的实现,这对我有用。

祝你好运!

答案 1 :(得分:1)

我也有这个问题。然后我将在WinXP上创建的MSJRO.TLH与在Win7上创建的MSJRO.TLH进行了比较。在WinXP上声明是

ADODB::_RecordsetPtr ...

在Win7上它是

_RecordsetPtr ...

我猜测问题可能与名称空间有关。 MSADO15.TLH定义了一个命名空间 - “ADODB”。所以我放置了:

using namespace ADODB;

在我导入Jet之前。

#import "MSJRO.DLL"

这为我摆脱了错误。