2016-11-17 2 views
1

Stack,VB6 программа взаимодействия с AutoCAD, не более способны создать или привязать к объекту ACAD

Для начала, этот сайт является фантастическим, вы помогли мне через много проблем в прошлом; Благодарю.

Двигаясь вперед, эта программа существует уже и в использовании, так как AutoCAD 2000. Текущая версия программного обеспечения совместима до ACAD

Я работаю с небольшой командой, и из ниоткуда , мой компьютер борется с комбинацией VB6/AutoCAD; другие разработчики все еще работают без проблем ...

Позднее привязка используется для получения или создания объекта; в зависимости от того, запущен ли Acad ... например.

Set oAutoCad = GetObject(, "Autocad.Application") 
If err.Number Then 
    err.Clear 
    Set oAutoCad = CreateObject("Autocad.Application") 
    If err.Number Then 
     MsgBox UCase$("Unable to launch AutoCAD Session") 
     End 
    Else 
     oAutoCad.Visible = True 
    End If 
End If 

Существует два разных исполняемых файла (с использованием той же технологии привязки), которые работают с ACAD, чтобы делать разные вещи. Для обоих из них программное обеспечение не работает как с CreateObject, так и с GetObject с «Ошибка времени выполнения 429 - Компонент ActiveX не может создать объект. Однако добавление« .20 »к вызову позволяет мне создать объект, но я все еще могу ' т связываются с существующим. например ..

Call CreateObject("Autocad.Application.20") 

Я считаю, что разница между мной и командой, что я недавно был повторно установить VB6 после некоторых «Ошибка доступа системного реестра» проблемы всплыли (сразу после обновления Windows, ... странно). Это большая разница: все остальные мигрировали с 7 до 10 с установленным VB6. Я первый, чтобы установить на машину Windows 10 напрямую.

Мы, мы Первоначально использовались SP6 с VB6, хотя эта проблема привлекла мое внимание. По-видимому, они все еще обновляют пакет обновления. Итак, компьютер недавно был обновлен до SP6D. Я также попытался установить накопительный пакет обновления.

Я попытался изменить настройки совместимости с Win 7, Win 8, XP (все они) ... Я понятия не имею.

Я Запуск от имени администратора

Это 64 бит машина.

Установлена ​​оригинальная библиотека MSDN VB6 ... по какой-то причине SP6 не будет правильно устанавливаться до тех пор, пока это не будет ... в этом случае фактическая установка VB6 будет зависеть от конца. Это, похоже, не сильно влияет, но должно быть что-то делать в фоновом режиме (или не делать)

Любая помощь будет принята с благодарностью ... вот на что надеяться.

******* Новая информация ******* По-видимому, добавление «.20» подходит только для одного из exes, другое требует и дополнительного номера версии (например, «Autocad .Application.20.1 ")

Чтобы сделать его более интересным, если я запустил проект с« 20 .1 », остановите код в момент создания объекта, дождитесь запуска автокада, установите его на вид, откройте чертеж Мне нужно подключиться к пользовательскому интерфейсу ACAD, а затем разрешить продолжить программу, GetObject не сработает ...

????

ответ

0

После того, что казалось вечностью поиска, я нашел ответ здесь ...

Late binding run-time error in VB6 when creating an object from a .NET assembly

Суть его была в этом ...

При использовании CreateObject/GetObject идентификатор класса (CLSID), что ваш ссылающееся хранится в реестре ... как под HKEY_CLASSES_ROOT улья и HKEY_LOCAL_MACHINE улей под (классы) - (AutoCAD.Application) (. X)

кажется, что вызов CreateObject использует HKEY_CLASSES_ROOT, в то время как GetObject может быть с помощью HKEY_LOCAL_MACHINE ... того, что я не уверен, но это объясняет, почему работает вызов CreateObject, а не GetObject. Мой улов HKEY_LOCAL_MACHINE каким-то образом отсутствовал ключ «AutoCAD.Application»; возможно, из-за установки или обновления какого-то типа ... Я не уверен.

Я знаю, сравнивая значения между ульями и добавляя значение «CurVer» и значение «CLSID» к вновь созданному ключу «AutoCAD.Application», теперь программа может создавать и связывать без указав версию (например ..

CreateObject("AutoCAD.Application") 
GetObject(, "AutoCAD.Application") 

вместо ...

CreateObject("AutoCAD.Application.20.1") 
GetObject(, "AutoCAD.Application.20") 

или даже хуже

Run-Time Error 429: ActiveX Компонент не может создать объект

Еще раз спасибо Stack.

Смежные вопросы