Проблема с Activex

  • Автор темы jarilo
  • Дата начала
J

jarilo

#1
У меня есть задача - передать некоторые данные из DLL, написанной на С++ в прогу на Java.
Причем данные эти я должен взять из элемента ActiveX.
Насколько я понимаю, ActiveX должен обязательно быть размещен в каком-то окне, класс которого порожден от CWnd. Но проблема еще и в том, что мне не нужно, чтобы пользователь видел этот ActiveXэлемент
Делаю так:
CWnd* psWnd=new CStatic;
res=psWnd->Create(_T("STATIC"),(LPCTSTR)"32323",0,CRect(0,0,1,1),pWnd,324);
res=m_Camera.CreateControl(m_Camera.GetClsid(), (LPCTSTR)"sdfdf", 0, CRect(0, 0, 1, 1), psWnd, 2342);
short r=pWnd->m_Camera.Connect(0, 0, 2, 0, (LPCTSTR)"localhost");
m_Camera - объект класса, реализующего интерфейс элемента ActiveX и порожденный от CWnd.
Если вызывать этот код из MFC-приложения, все работает. В DLL работать отказывается.

У меня два вопроса:
1. Почему не работает.
2. Можно ли использовать ActiveX, не создавая окна?
 
S

skysun

#3
1) Java и ActiveX несовместимы. Надо писать "прослойку" на JNI.
2) в твоем случае без окна не обойтись т.к. ты создаешь контрол.
3) Лучше используй родные Java пакеты - проблем меньше.
 
J

jarilo

#4
1) Java и ActiveX несовместимы. Надо писать "прослойку" на JNI.
2) в твоем случае без окна не обойтись т.к. ты создаешь контрол.
3) Лучше используй родные Java пакеты - проблем меньше.
Проблему решил с помощью пакета jacoZoom. Очень хороший продукт - рекомендую. Не нужно никаких DLL к проекту добавлять, только один jar-файл. Есть модуль, который генерит на основе ActiveX код на Java для пользования этим элементом. Все очень просто и понятно. Он правда немного платный, но демо-версия делает все то же, что и лицензионная.
Сравнивал с другими пакетами, из бесплатных - с JACOB, но у него слабая (почти не реализованная) поддержка ActiveX. Из платных - JCOM, но он во-первых создает дополнительную DLL, которую надо вставлять в проект, она к тому же еще и ругаться будет после окончания trial-периода, во-вторых - неоправданно дорог. Пробовал еще несколько пакетов - недостатки те же, что и у первых двух.

Окно все-таки пришлось создать, но я задал его размеры 1х1, и его не видно.

Родные Java-пакеты использовать в моем случае было невозможно, так как ActiveX элемент поставляется вместе с оборудованием, для которого нет Java-пакетов и для которого неизвестны форматы передаваемых данных.