Как исправить «неожиданную ошибку (32801)» при компиляции программы VB 6? - PullRequest
3 голосов
/ 08 марта 2010

Мне нужно поддерживать старую библиотеку ActiveX VB 6, вызываемую другой сторонней программой, для которой у меня нет источников и т. Д. Эта DLL работает и прекрасно компилируется с API указанной программы в течение 6 лет и 3 основных версий. *

Но теперь, когда я пытаюсь скомпилировать DLL для новой основной версии, возникает упомянутая ошибка. Кажется, ошибка происходит до того, как «мой» код вызывается, поэтому нет никакой необходимости в отладке или регистрации. Единственным выходом было компилировать без двоичной совместимости, что нереально. Мой поиск в Google обнаружил довольно много людей с той же проблемой, но без решения.

Кто-нибудь здесь знает, как решить эту проблему?

Заранее спасибо

банзай

Ответы [ 5 ]

3 голосов
/ 03 октября 2012

Я наконец выясняю, как диагностировать ошибку VB6 32801 системным способом.

Моя теория: когда компилятор VB6 создает проект или двоичную совместимую библиотеку, компилятор декомпилирует информацию о типе из указанной библиотеки. Произошла ошибка 32801. Информация о типе исходного кода не совпадает с указанной библиотекой.

Существует инструмент под названием OLEView. Этот инструмент может декомпилировать информацию о типе COM в текст IDL. Что я делаю, так это декомпилирую указанную библиотеку в IDL и беру последнюю удачную сборку неисправной библиотеки. В большинстве случаев это версия сервера сборки, но сборка не работает на рабочей станции разработчика. Декомпилируйте последнюю хорошую сборку. Используйте инструмент сравнения текста, такой как WINMerge, и найдите различия между библиотеками типов. Различия позволяют легко отследить проблему.

В зависимости от разницы будет определять, как исправить. Смягчение последствий может быть выполнено либо путем исправления эталонной DLL, либо путем исправления исходного кода, либо ссылок на исходный код.

1 голос
/ 08 марта 2010

Похоже, что один из типов интерфейсов, определенных в вашей новой DLL, отличается от типа в предыдущей DLL. Я делаю вывод, что вы используете типы, определенные в сторонней программе, в ваших открытых интерфейсах вашей DLL. Мне кажется, что третье лицо изменило определение одного из типов, но сохранило имя и GUID одинаковыми. Вы можете использовать что-то вроде OLE / COM Object viewer , чтобы проверить, правда ли это. Если это правда, то вы можете пожаловаться издателю сторонней программы. Достаточно ли у вас политической власти, чтобы добиться успеха?

Брюс МакКинни, гуру, который написал Hardcore Visual Basic 6 , запустил в ту же проблему со структурой в библиотеке типов, где он изменил некоторые типы элементов. Единственное исправление, которое он мог найти, - это (по сути) нарушение бинарной совместимости - и это после некоторой переписки с командой компиляторов VB6, которую он знал довольно хорошо. Я не думаю, что кто-то еще мог бы сделать лучше.

0 голосов
/ 31 января 2019
---------------------------
Microsoft Visual Basic
---------------------------
Unexpected error (32810)
---------------------------
OK   Помощ   
---------------------------

Это сообщение, которое я получал, пытаясь сослаться в VBIDE на старый OCX, который был недавно перекомпилирован.

После нескольких долгих исследований ошибочные строки кода, вызвавшие эту ошибку, оказались

Property Get MouseActivate() As BookmarkEnum

Просто изменил это на

Property Get MouseActivate() As Boolean

. , , и ошибка исчезла.

BookmarkEnum - это перечисление из ADO. Наш сервер сборки - Server 2003, а моя машина разработки - Win10. Проект ссылается на ADO 2.8, но, очевидно, эта библиотека типов имеет некоторые отличия на Server 2003 и Win10

0 голосов
/ 08 марта 2010

Помечены ли какие-либо файлы, связанные с компилируемым основным проектом, как доступные только для чтения (т. Е. Не извлечены из SourceSafe или аналогичного репозитория)?

*. Ехр * .vbw * .Lib

0 голосов
/ 08 марта 2010

Обсуждается эта ошибка на devx.com, которая указывает на то, что проблема возникла из-за Microsoft Scripting Runtime (scrrun.dll).

FileSystemObject совместимость Неожиданная ошибка (32810)

Ваша DLL ссылается на эту библиотеку? Если да, то можете ли вы удалить ссылку (например, заменить функциональность FileSystemObject встроенными функциями обработки файлов VB и / или вызовами API).

...