Проблемы при миграции с VS 2003 на VS 2008 - PullRequest
0 голосов
/ 21 августа 2009

Я преобразовал один из моих проектов Visual Studio 2003 в VS2008, и при попытке построить проект в VS2008 я получаю указанную ниже ошибку.

В oledb.h у меня есть

typedef LONG DBROWCOUNT;

и в sybdb.h у меня есть

#define DBROWCOUNT      16

При компиляции я получаю следующие ошибки:

c:\program files\microsoft sdks\windows\v6.0a\include\oledb.h(633) : error C2143: syntax error : missing ';' before 'constant'
c:\program files\microsoft sdks\windows\v6.0a\include\oledb.h(633) : error C2059: syntax error : 'constant'
c:\program files\microsoft sdks\windows\v6.0a\include\oledb.h(3005) : error C2059: syntax error : 'constant'

Если я прокомментирую //#define DBROWCOUNT 16, то эти ошибки будут устранены, но я не должен вносить изменения в код, поэтому, пожалуйста, помогите мне преодолеть эту ошибку, спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 21 августа 2009

Хотя я не могу говорить о том, что это не было проблемой с VC 2003, основные проблемы здесь заключаются в том, что вы определили DBROWCOUNT как тип и как макроконстанту (что, как вы знаете, недопустимо). Вам нужно будет внести изменения где-то , иначе вы не сможете исправить ошибку компилятора. Если oledb.h - системный заголовок, то изменение должно быть вашей константой:

#define DBROWCOUNT 16

Можете ли вы изменить этот макрос define на что-то вроде:

#define dbRowCount_k 16

А затем заменить DBROWCOUNT на dbRowCount_k в тех местах кода, где вы используете это значение как целое число (в отличие от типа)?

0 голосов
/ 21 августа 2009

Кажется, проблема в том, что DBROWCOUNT определен как 16, поэтому он заменен препроцессором, что приводит к строке

typedef LONG DBROWCOUNT; 

конвертируется в

typedef LONG 16; 

после предварительной обработки, что явно является ошибкой. Но, не глядя на код, я не могу сказать, почему этого не произошло в 2003 году.

...