Как устранить ошибки сборки, используя VS 2010 Ultimate на 32-битной XP Sp3 - PullRequest
3 голосов
/ 28 сентября 2010

Установлен VS2010 Ultimate на моей рабочей станции - Dell Precision T3500 (64-битная ОС Windows 7) и на моем IBM ThinkPad R51 (32-битная Windows XP Sp3).

У меня проблемы со сборкой решений на 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 ]

2 голосов
/ 16 октября 2011

Я столкнулся с этой же проблемой при первой компиляции с новой версией 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. Когда я исправил эту проблему, используя this KB, мои проблемы с msado dll были исправлены, но мой msjro.tlb перестал компилироваться. Вероятно, есть способ обновить msjro для ссылки на нужное / правильное msado (в моем случае msado60_Backcompat.tlb, как установлено в КБ), но если вы используете классы CADODatabase , определенные в ado2.cpp и ado2.h, и если вы не используете специфичные для джета функции, то проще всего закомментировать части ado2.h и ado2.cpp, которые ссылаются на струю.
Я только что закомментировал эту строку в ado2.h:

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

, а также # ifdef'd все реализации методов CJetEngine в ado2.cpp, и это сработало для меня.

Удачи!

1 голос
/ 13 июля 2012

У меня тоже была эта проблема. Затем я сравнил MSJRO.TLH, созданный на WinXP, с тем, что был создан на Win7. На WinXP объявление было

ADODB::_RecordsetPtr ...

на Win7 это было

_RecordsetPtr ...

Я догадался, что проблема может быть связана с пространствами имен. MSADO15.TLH определяет пространство имен - «ADODB». Итак, я разместил:

using namespace ADODB;

до моего импорта Jet.

#import "MSJRO.DLL"

Это избавило меня от ошибок.

...