Проект Visual Basic 6 потерял ссылку на все пользовательские типы и не будет компилироваться - PullRequest
3 голосов
/ 06 июля 2011

Я совершил несколько рабочих компиляций дополнений в Subversion с использованием TortiseSVN один день назад, закрыл Visual Basic 6.0 (SP6), и сегодня, когда я открыл проект, IDE не будет компилировать проект.

Я получаю ошибку: Ошибка компиляции: пользовательский тип не определен .

Кроме того, когда я пытаюсь перейти к определению ЛЮБОЙ тип, скажем MSComm или Байт , я получаю сообщение: Идентификатор под курсором не распознается .

Единственные измененияк файлам VBP, которые я вижу с помощью средства просмотра различий TortiseSVN, добавлены файлы Class , которые я добавил.

1 Ответ

1 голос
/ 06 июля 2011

Являются ли эти типы в одном проекте?Если нет, проверьте ссылки на проект.Они передаются через разделы реестра, которые, возможно, были изменены вне рамок проекта.

Создаете ли вы dll-компонент или ActiveX exe (в отличие от Forms exe)?Если это так, попробуйте отменить регистрацию предыдущей сборки.

Если в настройках проекта включена бинарная совместимость, VB6 будет искать предыдущую сборку для разрешения символов.Возможно, вы удалили предыдущую сборку, или она как-то сломана.Отключите двоичную совместимость и удалите предыдущую сборку, затем попытайтесь перекомпилировать.(Не забудьте отменить регистрацию, если это компонент, в противном случае ваш реестр останется усеян сломанными ключами класса.)

[править] Пояснения:

Спроверяя ссылки проекта я имею ввиду меню в IDE.В списке будет указано, не удалось ли найти ссылку (если она уже помечена как добавленная) в реестре.Да, это те, что в VBP, но с текстовым редактором вы не видите, действительно ли GUID / версия все еще существует.Они могут измениться, если указанный компонент будет обновлен / исправлен.

Поскольку реестр становится замусоренным, я имею в виду, что если вы компилируете без совместимости проекта / бинарного файла, то VB6 сгенерирует новые GUID для ваших классов.Публичные классы отмечены в реестре с путем к dll.Обычно VB6 отменяет регистрацию библиотеки DLL перед ее перезаписью, но если вы удалите предыдущую сборку вручную, никто не собирается ее отменять, поэтому информация о классе остается в реестре, ссылаясь на библиотеку DLL, которой больше не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...