Тема: Выполнение методов ARX COM-сервера из VB

Привет всем!
Создал модуль ARX как сервер COM.
Все работает, методы отрабатывают, но только если их вызывать из автокадовского VBA.
Из обычного VB при вызове метода выдается ошибка Automation Error.
Есть ли возможность заставить выполняться ARX COM-сервер из обычного VB?
Спасибо.

Re: Выполнение методов ARX COM-сервера из VB

По-моему, arx-приложения могут вызываться и выполняться только внутри AutoCAD'a. Если надо использовать в другом месте, наверное, придется делать обычный СОМ.

Re: Выполнение методов ARX COM-сервера из VB

> Леонид
Можно попробовать "обычный VB" скомпилировать в .dll-файл и подсоединить к VBA-коду... Но зачем такие сложности?

Re: Выполнение методов ARX COM-сервера из VB

> LeonidSN
VBA отпадает, так как глючит, к сожалению.

Но зачем такие сложности?

Надо найти способ передавать данные и управлять ARX-приложением из ехе-шника, сделанного в VB

Re: Выполнение методов ARX COM-сервера из VB

Тогда, думаю, надо получать указатель на объект AutoCADa, его документ и выполнять arx в контексте документа.

Re: Выполнение методов ARX COM-сервера из VB

> kpblc
Похоже придется довольствоваться передачей функций, что-то вроде:
acap.ActiveDocument.SendCommand "(c:func args)"
Даже получается несколько проще, чем с COM возиться :)

Re: Выполнение методов ARX COM-сервера из VB

> Леонид
А arx-файл (который COM-сервер) загружен в AutoCAD?

Re: Выполнение методов ARX COM-сервера из VB

> Александр Ривилис
Конечно.
Если не загружен, по идее, .arx файл должен работать как обычная комовская .dll... хотя не пробовал проверить

Re: Выполнение методов ARX COM-сервера из VB

Продолжение здесь :)
https://www.caduser.ru/forum/topic29586.html

Re: Выполнение методов ARX COM-сервера из VB

Из обычного VB при вызове метода выдается ошибка Automation Error.

Какая именно ошибка? И как идет обращение к COM-серверу? Кусочек кода.

Re: Выполнение методов ARX COM-сервера из VB

Проект ARX с поддержкой COM создаю в визарде, добавляю класс AcSpy, добавляю в него метод

STDMETHODIMP CAcSpy::doIt(BSTR strName)
{
    char buff [128];
    WideCharToMultiByte (CP_ACP, 0, strName, -1, buff, 128, 0, 0);
    MessageBox (0, buff, "", MB_OK);
    return S_OK;
}

Создаю проект в VB 6.0, подключаю в референсах ARX, код следующий:

Dim perem As New AcSpy
perem.doIt "Simple message"

При проходе второй строчки выдает сообщение
Run-time error '-2147024770 (807007e)':
Automation error
Когда делаю тоже самое в акадовском VBA,
все отрабатывает без проблем.

Re: Выполнение методов ARX COM-сервера из VB

> Леонид
Моя интуиция подсказывает, что нужно использовать acad.GetInterfaceObject(...) вместо new AcSpy

Re: Выполнение методов ARX COM-сервера из VB

Работает!!!

Dim a As AcSpy
Dim acad As AcadApplication
Set acad = GetObject(, "AutoCAD.Application")
Set a = acad.GetInterfaceObject("AcadSpy.AcSpy")
asd.doIt "simple message"

Александр, просто нет слов...
Спасибо! :)

Re: Выполнение методов ARX COM-сервера из VB

А так интересно работает?

Dim a As Object
Set a = CreateObject("AcadSpy.AcSpy")
asd.doIt "simple message"

Re: Выполнение методов ARX COM-сервера из VB

> BP
Нет, та же ошибка.
По видимому, на этот объект надо выходить только через AcadApplication.

Re: Выполнение методов ARX COM-сервера из VB

> Леонид
Очень интересно. Спасибо, будем знать.

Re: Выполнение методов ARX COM-сервера из VB

Ошибочка..
не asd конечно :)

a.doIt "simple message"

Re: Выполнение методов ARX COM-сервера из VB

> Леонид

> Леонид
:) Значит интуиция не подвела. А то что объект нужно "взять" через AcadApplication - это очевидно. Иначе он создастся "внутри" VB-приложения, а не внутри AutoCAD.

Re: Выполнение методов ARX COM-сервера из VB

> Леонид
Извиняюсь за любопытство
   можете прислать работающий кусочек для  примера как это делается?
Буду весьма благодарен

Re: Выполнение методов ARX COM-сервера из VB

Кстати, удалось даже комовские события заставить работать вместе с реакторами. То есть, получается полноценное управление с обратной связью.

> ROMA
Скоро кину ссылку для скачивания этого проекта, скорее всего в понедельник вечером.

Re: Выполнение методов ARX COM-сервера из VB

http://ustation.ru/apps/arxcom.zip