Russian Qt Forum
Ноябрь 01, 2024, 05:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: RealPlayActiveX и Qt  (Прочитано 5899 раз)
Disa
Гость
« : Декабрь 17, 2013, 12:55 »

Добрый день. Волею судеб приходиться возиться с ActiveX компонентами, до этого туда не лазил за ненадобностью. Читаю доки и экзамплы смотрю, пока только одни вопросы. В компоненте есть интерфейс (_DIPCRealPlayActiveX), к которому я хочу достучаться, но не понимаю как. То есть я могу, конечно, вызвать queryInterface(), но где взять хидер или что-то еще, где описан требуемый класс, который я буду передавать во второй параметр?

Плюс не понимаю как работает dynamicCall("").

У товарищей есть js работающий код, вот такой вот (Ну js + html, конечно):
Код:
<object classid="clsid:bla-bla-bla" standby="Waiting..." id="PreviewActiveX" name="PreviewActiveX"><embed width="100%" height="100%"></embed></object>
...
m_PreviewOCX = document.getElementById("PreviewActiveX");
m_PreviewOCX.Login(m_szHostName,m_lPort,m_strUserName,m_strPassword);
m_PreviewOCX.ptzCtrlStop(10, m_iPTZSpeed)

Мне же при попытки вызова dynamicCall("ptzCtrlStop(int, int)", 10, 4) выдают что нет таких методов.

Собственно говоря, мне эти два метода и нужно вызывать, больше ничего не требуется. Буду рад любой помощи и за ранее благодарен!
« Последнее редактирование: Декабрь 17, 2013, 12:58 от Disa » Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #1 : Декабрь 17, 2013, 13:26 »

для начала попробуйте:

Код
C++ (Qt)
QAxObject* obj = new QAxObject("bla-bla-bla"); // из строки: classid="clsid:bla-bla-bla"
qDebug() << obj.generateDocumentation();
вывод будет большой портянкой с описанием методов.
А далее уже можно будет dynamicCall(), property() и querySubObject(), а также запрашивать интерфейсы: queryInterface()
Записан
Disa
Гость
« Ответ #2 : Декабрь 17, 2013, 13:51 »

За это спасибо, только селектор у вас не тот ибо поинтер Улыбающийся

Остается открытым вопрос - где найти что-то, где была бы декларация класса с интерфейсом (хидер)?

Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #3 : Декабрь 17, 2013, 15:35 »

Цитировать
селектор у вас не тот ибо поинтер
обычно ide заменяет на нужный Подмигивающий

Цитировать
где найти что-то, где была бы декларация класса с интерфейсом (хидер)
1. что выдало generateDocumentation?
2. попробуйте dumpcpp
Записан
Disa
Гость
« Ответ #4 : Декабрь 17, 2013, 15:56 »

Спасибо! Уже докопался до dumpcpp и сделал требуемые *.h и *.cpp.

generateDocumentation cгенерировал html'ку с тем, что предоставляет этот контрол, но среди предоставленных методов требуемых не нашел. Пока не очень понимаю куда дальше копать...

Пока есть:
Код:
The IPCRealPlayActiveX Control COM object is a QAxObject with the CLSID {97E289A5-C277-4114-8F3A-DAC14CFB7777}.

Interfaces
_DIPCRealPlayActiveX

Event Interfaces
_DIPCRealPlayActiveXEvents
IPropertyNotifySink

Public Slots:
void AboutBox();
bool SetRegeditInfo(QString lpRegeditInfo);

Signals:
void IsRealPlaying(bool bRealPlaying);
void exception(int code, QString source, QString disc, QString help);
void propertyChanged(QString name);
void signal(QString name, int argc, void* argv);

Properties:
QString objectName;
QString control;
...

Подскажите откуда товарищи в js выкопали метод, например, m_PreviewOCX.ptzCtrlStart(1, m_iPTZSpeed)? Напоминаю, что m_PreviewOCX = document.getElementById("PreviewActiveX"), а PreviewActiveX - object classid="clsid:такой же идентификатор".

Спасибо огромное за помощь!
« Последнее редактирование: Декабрь 17, 2013, 15:58 от Disa » Записан
Disa
Гость
« Ответ #5 : Декабрь 18, 2013, 16:43 »

Более развернутый вопрос:
http://stackoverflow.com/questions/20657209/ipcrealplayactivex-control-qt

За не имеем решения, углубляюсь в API камеры.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.094 секунд. Запросов: 23.