Тема: Связь VB с AutoCAD
Подскажите алгоритм связи между двумя програмами.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Связь VB с AutoCAD
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите алгоритм связи между двумя програмами.
1) reate a backup of the folder containing your Visual Basic automation source files.
This ensures that you have a copy of the source files to use with previous releases of AutoCAD, if needed.
2) Open the Project (VBP) file in Visual Basic, and then on the Project menu, click References.
3) In the References dialog box, remove the reference to the type library named acad.tlb, which by default is located in c:\program files\autocad 2002.
4) In the References dialog box, add a reference to the type library named acax16enu.tlb, which by default is located in c:\program files\common files\autodesk shared, and then click OK.
5) If a CreateObject or GetObject function uses a version-independent ProgID, change the function to use a version-dependent ProgID. For AutoCAD 2004, use version-dependent ProgIDs.
For example, if you are using CreateObject for AutoCAD 2004, you replace CreateObject ("AutoCAD.Application") with CreateObject ("AutoCAD.Application.16").
Additionally, if a GetInterfaceObject method uses a version-independent ProgID, the method must be changed to use a version-dependent ProgID.
Note To use CreateObject, GetObject, or GetInterfaceObject for previous releases of AutoCAD, you use the appropriate version. For example, for AutoCAD 2002, you replace CreateObject ("AutoCAD.Application") with CreateObject ("AutoCAD.Application.15").
6) Save the Project file and recompile it.
Декларируешь переменные
Public ThisDrawing As AutoCAD.AcadDocument Public ACAD_APP As Object Запускаешь функцию Public Function Connect2Acad() As Boolean 'Basicly it sets the ThisDrawing public variable to active document On Error Resume Next If ACAD_APP Is Nothing Then Set ACAD_APP = GetObject(, "AutoCAD.Application") If Err Then MsgBox "AutoCAD is not Running!" Set ThisDrawing = Nothing Connect2Acad = False Exit Function End If End If Set ThisDrawing = ACAD_APP.ActiveDocument Connect2Acad = True If Ut Is Nothing Then Set Ut = New Util End If End Function
И начинаешь работать.
С точки зрения клиент-серверной архитектуры возможны два варианта:
1.ACAD - сервер, VB - клиент с использованием т.н. технологии позднего связывания.
Sub ACAD_Connect() Public AcadApplication As Object On Error Resume Next Set AcadApplication = GetObject(, "AutoCAD.Application") используется если Автокад уже запущен, 'иначе используем ф-цию CreateObject,которая запускает Автокад на выполнение If Err Then Set AcadApplication = CreateObject("AutoCAD.Application") AcadApplication.Visible = True Err.Clear End If End Sub
Недостатки: из-за многоступенчатого доступа к обьектам
Автокада и необходимости многократных проверок (позднее связывание) работает медленно и возможны ошибки времени выполнения.
2.VB - сервер, ACAD (в лице VBA) - клиент.Эта схема напоминает пришивание пиджака к пуговице. В VB-программе в модуле класса StartMyProgram пишем процедуру запуска:
'class StartMyProgram in MyVBProgram: Public Sub StartMyVB(ThisDrawingVBA As AcadDocument) Call AccessToDraw(ThisDrawingVBA) Form1.Show End Sub
и в VBA пишем процедуру вызова осн. программы и передаем туда объект ThisDrawing:
'VBA-macros: Sub StartVB() Dim vb As StartMyProgram Set vb = New MyVBProgram.StartMyProgram vb.StartMyVB ThisDrawing End Sub
Затем компилируем VB-прогу в dll-файл и присоединяем
его к VBA-макросу в качестве компонента. Для полноты картины вешаем на кнопку LISP для запуска макроса.
Недостатки:При отладке такой программы присходит засорение среды, т.к. каждый вариант программы приходится регистрировать в ОС как новый компонент,а также
сбои присущие COM-технологии.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Связь VB с AutoCAD
Форум работает на PunBB, при поддержке Informer Technologies, Inc