Intellisense грешки на .DEF файл

Опитвам се да науча C++, особено да експортирам функции от моята библиотека. Настроих файл с дефиниция на модул (.DEF), който посочва експортираните функции. Синтаксисът е съвместим с това, което прочетох в MSDN.

Опитвам се да разбера защо получавам intellisense грешки на почти всеки израз на DEF файла.

Например:

EXPORTS
    LibDescription @1 PRIVATE
    LibInitialize @2 PRIVATE
    LibVersion @3 PRIVATE

Получава интелигентни грешки по следния начин:

unexpected token '@'
unexpected token 'PRIVATE'

Въпреки всичко това (това са грешки, а не предупреждения), библиотеката се изгражда добре и освен това експортира всички необходими функции, така че наистина е просто неудобство, което затруднява виждането на действителните грешки в кода в списъка.

Това очаквано поведение ли е или има очевидна настройка, която пропускам някъде?

редактиране: както се предлага в коментарите, най-много грешки идват от линкера, а не от компилатора, тъй като не се споменават за тях в изходния панел на компилатора.

edit2: това, което генерира грешките, всъщност е intellisense, редактирано заглавие и тагове.


person Rotem    schedule 19.01.2012    source източник
comment
Имате предвид грешки в линкера? Файлът .def се чете от линкера. Ако самият компилатор генерира тези грешки, може да сте конфигурирали неправилно свойството на инструмента за изграждане на вашия .def файл.   -  person Frédéric Hamidi    schedule 19.01.2012
comment
@FrédéricHamidi Не съм сигурен как да различа грешките на линкера от грешките на компилатора. Грешките се показват в интерактивния прозорец за грешки/предупреждения на Visual Studios. Не мога да намеря къде пише кой компонент генерира грешките. Също така не мога да намеря параметър "build action" за файла. Неговият „Тип елемент“ е зададен на „не участва в изграждането“.   -  person Rotem    schedule 19.01.2012
comment
Да, злоупотребих с термина. Тази настройка наистина се нарича Item Type във VS2010, а Does not participate in build е правилната стойност за .def файл (току-що проверих повторно с нов проект). Можете ли да погледнете панела Output за кодовете за грешки? Това ще каже със сигурност дали идват от компилатора или от линкера.   -  person Frédéric Hamidi    schedule 19.01.2012
comment
@FrédéricHamidi не се споменават за тях в изходния панел, което предполагам означава, че идват от линкера. Редактирах въпроса си. Но защо се случва това?   -  person Rotem    schedule 19.01.2012
comment
Всъщност и компилаторът, и линкерът извеждат грешките си в панела Output (префиксите на кода за грешка позволяват да ги разграничите). Ако тези грешки не се показват в панела Output, друг компонент е отговорен за тях. Силно подозирам Intellisense, но все още не мога да обясня това поведение. Имате ли инсталирани добавки на вашето Visual Studio?   -  person Frédéric Hamidi    schedule 19.01.2012
comment
@FrédéricHamidi Няма инсталирани добавки, но си прав за intellisense. Когато деактивирам напълно intellisense, грешките изчезват.   -  person Rotem    schedule 19.01.2012
comment
Може би разбрах: В менюто на VS2010 щракнете върху Tools | Options, отидете до Text Editor > File Extension и проверете дали разширението def е свързано с езиков редактор. Не би трябвало.   -  person Frédéric Hamidi    schedule 19.01.2012
comment
@FrédéricHamidi Всъщност в този диалог изобщо няма дефинирани разширения. Трябва ли да има?   -  person Rotem    schedule 19.01.2012
comment
Не, добре е, ако няма дефинирани разширения. Страхувам се, че изчерпах възможните обяснения...   -  person Frédéric Hamidi    schedule 19.01.2012
comment
@FrédéricHamidi благодаря ви, че отделихте време да проучите проблема.   -  person Rotem    schedule 19.01.2012


Отговори (2)


Проблемът беше, че имах инсталирани Python Tools for Visual Studio и предполагам, че смяташе, че файлът def е изходен код на Python. Деинсталирането на инструментите на Python реши проблема ми.

person Rotem    schedule 12.02.2013

Няма просто обяснение за вашия проблем. Значи има нещо, което не знаем. Може би можете да го видите от екранна снимка на примерен VS2010 DLL проект, който няма този проблем. Сравнете го внимателно с вашия.

въведете описание на изображението тук

person Hans Passant    schedule 12.02.2013
comment
Благодаря за снимката, Ханс. Ако започна с EXPORTS, както във вашия пример, всичко е наред. Проблемът започва, когато започна с LIBRARY. Каквото и да идва след LIBRARY получава грешка неочакван токен. т.е. LIBRARY MyLibrary.dll, води до неочакван токен 'MyLibrary' и оттам нататък всичко получава неочакван токен грешка. - person Rotem; 13.02.2013
comment
Съжалявам, предишният ми коментар е неправилен, дори във вашия пример получавам неочакван токен LibDescription. - person Rotem; 13.02.2013
comment
Проблемът е открит! Имах инсталирани Python Tools за Visual Studio и предполагам, че по някаква причина реших, че .def файлът е файл с код на Python. Деинсталирането му реши проблема. - person Rotem; 13.02.2013