3

在我的桌面工作站上安装了 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++ 不支持默认整数 c:\wpds\debug\msjro.tlh(196):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数 c:\wpds\debug\msjro.tlh(224): error C2146: syntax error: missing ';' 在标识符 'GetConflictTables' c:\wpds\debug\msjro.tlh(224) 之前:错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数

我已检查以确保所有项目和解决方案的所有包含、exe 和库路径都是正确的。任何见解将不胜感激。谢谢比尔

4

2 回答 2

2

我第一次用新版本的 msado15.dll 编译时遇到了同样的问题。msado15.dll 和 msjro.dll 之间存在依赖关系,如 msjro.tlb 顶部的这些行所示:

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

就我而言,出现问题是因为我在 Windows 7 上构建我的应用程序,并且SP1 更新包括 msado15.dll 中的重大更改,这将导致应用程序在 Windows XP 上失败。当我使用KB 修复此问题时,我的 msado dll 问题已修复,但我的 msjro.tlb 停止编译。可能有一种方法可以更新 msjro 以引用所需/正确的 msado(在我的情况下,安装在 KB 中的 msado60_Backcompat.tlb),但是如果您使用在 ado2.cpp 和 ado2.h 中定义的CADODatabase 类,并且如果您没有使用特定于 jet 的功能,更简单的解决方法是注释掉引用 jet 的 ado2.h 和 ado2.cpp 部分。
我刚刚在 ado2.h 中注释掉了这一行:

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

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

祝你好运!

于 2011-10-16T19:30:59.303 回答
1

I had this problem too. Then I compared the MSJRO.TLH created on WinXP to the one created on Win7. On WinXP the declaration was

ADODB::_RecordsetPtr ...

on Win7 it was

_RecordsetPtr ...

I guessed that the problem might be related to namespaces. MSADO15.TLH defines a namespace -"ADODB". So I placed:

using namespace ADODB;

before my import of the Jet.

#import "MSJRO.DLL"

This got rid of the errors for me.

于 2012-07-13T16:11:09.340 回答