VB6 COM Object - работает только во время работы IDE? - PullRequest
0 голосов
/ 20 января 2011

У меня есть древний COM-объект в VB6, который до недавнего времени работал нормально.(Не они все).Единственное изменение кода, которое было сделано (как проверено svn) - это включение нового строкового литерала в массив.

Среда VB6 прекрасно компилирует объект.Когда я нажимаю Run | Start ... и выполняю следующий тестовый скрипт vb из командной строки, объект работает нормально, и я вижу ожидаемые диалоговые окна:

dim o

set o = CreateObject("MyDll.MyClassName")

wscript.Echo "Testing object" 
wscript.Echo o.HelloWorld     ' runs a test method that returns "Hello World"
wscript.Echo "Done"

Однако, когда я прекращаю отладку вВ IDE и попытке запустить тот же vbscript из той же командной строки я получаю сообщение об ошибке:

alt text

(ProgID удален по соображениям безопасности, но он такой же, как вскрипт.)

То, что я пробовал:

  1. Я подозревал, что DLL может быть зарегистрирована и незарегистрирована VB, когда я запускаю и останавливаю отладчик, поэтому ятакже попытался зарегистрировать объект с помощью regsvr32 перед запуском тестового сценария.Это не имело никакого эффекта.

  2. Я также удалил все ссылки на DLL из реестра и перерегистрировал объект.Та же ошибка.

  3. Я удалил DLL, пересобрал ее из VB (File | Make ...) и перерегистрировал DLL.Та же ошибка.

На машине установлена ​​Win7 Ultimate x64, объект построен на VB6.

Есть предложения?

И, к сожалению, нет, переписать объект в C # не вариант.

Ответы [ 3 ]

1 голос
/ 01 апреля 2013

Ну, это определенно звучит как проблема из-за 32-битной DLL. Упомянутое выше предложение верное, но путь неправильный .. попробуйте использовать CSCRIPT из C: \ Windows \ SysWOW64 ..

1 голос
/ 20 января 2011

Microsoft говорит, что это какая-то проблема с зависимостями: http://support.microsoft.com/kb/194801

Поскольку он работает, когда вы запускаете объект в IDE, у вас есть четыре возможности:

  1. Сама DLL ActiveX не находится в системном пути.
  2. DLL ActiveX зависит от чего-то другого, чего нет в системном пути.
  3. После регистрации dll она как-то помечается как требующая повышенной безопасности для запуска
  4. После регистрации dll для запуска требуется повышенная безопасность.

Я бы попытался открыть командную строку от имени администратора, а затем запустить файл VBScript, который запускает объект. Если это работает, то это означает, что проблема №3 или №4. Если это не так, то это означает # 1 или # 2.

Вы можете исключить # 2 и # 4, если DLL-библиотека ActiveX не имеет внешних зависимостей.

Далее, я посмотрел бы в своем журнале событий, чтобы увидеть, регистрировались ли в Windows какие-либо другие ошибки по этому поводу.

ОБНОВЛЕНИЕ

Только что нашел другую возможную причину. Если DLL ActiveX является 32-разрядным, то сценарий должен использовать 32-разрядную версию обработчика сценариев для запуска; в противном случае он выдаст эту ошибку, потому что механизм сценариев по умолчанию (x64 на этом компьютере) буквально не может найти dll.

Полагаю, что если вы используете \ windows \ system32 \ cscript.exe для запуска вашего vbscript, то все будет в порядке.

0 голосов
/ 08 июля 2019

Попробуйте зарегистрировать DLL с помощью regsvr32.exe из %Windows%\SysWOW64. Это отличается от regsvr32.exe в %Windows%\System32 (в 64-битной ОС).

См. ТАК сообщение .

...