Ошибки Intellisense в файле .DEF

Я пытаюсь изучить С++, в частности экспортировать функции из моей библиотеки. Я создал файл определения модуля (.DEF), в котором указаны экспортируемые функции. Синтаксис соответствует тому, что я прочитал в MSDN. .

Я пытаюсь понять, почему я получаю ошибки IntelliSense практически в каждом операторе файла DEF.

Например:

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

Выдает ошибки intellisense в следующем порядке:

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 Studio. Я не могу найти, где написано, какой компонент генерирует ошибки. Я также не могу найти параметр «создать действие» для файла. Его «Тип элемента» установлен на «не участвует в сборке».   -  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

Простого объяснения вашей проблеме нет. Значит, мы чего-то не знаем. Возможно, вы можете увидеть это на снимке экрана примера проекта DLL VS2010, в котором нет этой проблемы. Внимательно сравните его со своим.

введите здесь описание изображения

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 для Visual Studio, и я думаю, что по какой-то причине он подумал, что файл .def является файлом кода Python. Удаление решило проблему. - person Rotem; 13.02.2013