在我的桌面工作站上安装了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路径都是正确的。任何见解将不胜感激。 谢谢 比尔
答案 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"
这为我摆脱了错误。