ActiveX & LV

ActiveX, .NET, DLL
Ответить
R-M
interested
interested
Сообщения: 3
Зарегистрирован: 09 июл 2010, 09:59
Версия LabVIEW: 9.0
Контактная информация:

ActiveX & LV

Сообщение R-M »

Необходимо реализовать простейший COM-сервер, реализующий динамическую модель. Нашел http://zone.ni.com/devzone/cda/epd/p/id/1219 вот тут пример. Беру из него DLL и пытаюсь использовать приаттаченной моделью, на что получаю отказ в виде такой вот ошибки. В чем дело, что я делаю не так?
Вложения
zzz.vi
(20.78 КБ) 232 скачивания
111.PNG
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: ActiveX & LV

Сообщение Eugen Graf »

Для регистрации класса в системе используй

regsvr32.exe путь_к_файлу.dll

или если это OCX, то

regsvr32.exe путь_к_файлу.ocx
R-M
interested
interested
Сообщения: 3
Зарегистрирован: 09 июл 2010, 09:59
Версия LabVIEW: 9.0
Контактная информация:

Re: ActiveX & LV

Сообщение R-M »

Спасибо. Я что-то забыл про золотое правило RTFM :)
Колега
advanced
advanced
Сообщения: 195
Зарегистрирован: 21 фев 2011, 10:31
Версия LabVIEW: 2009
Контактная информация:

Re: ActiveX & LV

Сообщение Колега »

А немогли бы поподробней объяснить как это сделать? у меня тоже такая же ошибка вылезла...
Eugene

Activity Bronze
leader
leader
Сообщения: 548
Зарегистрирован: 20 авг 2009, 17:58
Награды: 2
Версия LabVIEW: 2011
Контактная информация:

Re: ActiveX & LV

Сообщение Eugene »

start->run->cmd regsvr32.exe путь_к_файлу.dll
We live in a graphical world.
Why not program in one?
Колега
advanced
advanced
Сообщения: 195
Зарегистрирован: 21 фев 2011, 10:31
Версия LabVIEW: 2009
Контактная информация:

Re: ActiveX & LV

Сообщение Колега »

Я так делал, интересно что при этом выдается сообщение "ошибка при вызове LoadLibrary (......) - Не найден указанный модуль", НО при этом Лабвью перестала ругаться с сообщением "Класс не зарегистрирован".
PeyNikola
junior
junior
Сообщения: 56
Зарегистрирован: 24 июл 2012, 11:09
Версия LabVIEW: 2011, 202x
Контактная информация:

Re: ActiveX & LV

Сообщение PeyNikola »

Доброе время суток.

Пишу программу для AutoCAD.
На одной домашней машине установлено два AutoCAD-а: 2007 и 2013.
На другой машине установлено AutoCAD: 2007 и 2011.
Для каждой версии AutoCAD на машинах вижу соответствующие версии компонентов ActiveX.
Изначально работал только с 2007 версией, и не задумывался об адаптации своей программы под другие версии AutoCAD.
Пришло время.

Так вот, на той машине, где установлены 2007 и 2013, не получается корректно писать программу для версии 2011, т.к. для неё компоненты ActiveX не то что не зарегистрированы, они вообще отсутствуют - что и естественно.
Для лучшего понимания - файл
ACAD.vi
(23.88 КБ) 222 скачивания
Чтоб увидеть о чём речь, в файле можно попробовать поизменять у кластера [Bundle By Name] на разные ACAD, (у меня сделано так для выбора reference), итак, [property Node] изменятся на более короткие:
4.png
При этом, если щёлкнуть ПКМ по [property] - то выбрать другое [property] не из чего. Но при этом код является рабочим, в плане, ошибок нет -> выполнение разрешается.
5.png
Да, конечно не у всех установлен ACAD какой-либо версии, но LabVIEW разрешит запустить программу и без каких-либо AutoCADов на машине.

Собственно вопросы:
Как правильно создавать код, в подобной ситуации?
Как заложить не существующие на данной машине ActiveX? Почему LabVIEW проглатывает Properties у несуществующих reference, полученные от существующих. (Использую LV 2011)
Может есть некий способ как использовать одинаковый код для разных reference.
Или может быть путь изначально не верный, м.б. реализовывать поддержку новых (или не установленных) версий ActiveX через подгрузку классов?
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1334
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 40 раз
Контактная информация:

Re: ActiveX & LV

Сообщение AndreyDmitriev »

PeyNikola писал(а):на той машине, где установлены 2007 и 2013, не получается корректно писать программу для версии 2011, т.к. для неё компоненты ActiveX не то что не зарегистрированы, они вообще отсутствуют - что и естественно.
Вообще единственно правильное решение тут - установить на машине разработки все версии, поддержка которых запланирована. В чём проблема поставить на эту машину также и 2011? Теоретически можно попробовать обойтись без полной инсталляции, перенеся лишь ActiveX и зарегистрировав его. Каждый раз при выборе Property LabVIEW обращается к интерфейсам ActiveX, и если он отсутствует, то и список пуст - обойти это средствами LabVIEW вряд ли получится. Как вариант можно попробовать написать вспомогательную DLL - но вы не сможете проверить правильность работы программы при отсутствующем 2011. Классы тут не сильно помогут. Решение с классами будет, вероятно, чуть более красивым с точки зрения архитектуры, но создать методы класса для работы с 2011 всё равно нужно иметь Autocad соответствующей версии.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приложениями»