Что нового

Не вызываются ActiveX методы в объекте ViewRightActiveXControl

UnEpicFail

Новичок
Сообщения
24
Репутация
0
Доброго времени суток.


Код:
Global $viewRightControl= ObjCreate('VIEWRIGHTACTIVEX.ViewRightActiveXCtrl.1')
if not IsObj($viewRightControl) then 
    Msgbox(0,"Error","$viewRightControlis not an Object.")
else
    Msgbox(0,"Error","Successfully created Object $viewRightControl")
    Msgbox(0,"Error",ObjName($viewRightControl,2))
    MsgBox(0,"Error",$viewRightControl.getClientID())
endif


Вот, казалось бы, простой пример кода, в котором я подключаю ActiveX библиотеку, проверяю корректность создания объекта, вывожу ее название и и пытаюсь воспользоваться методом "getClientID". При выполнении все идет хорошо объект создается, команда ObjName выдает корректные данные, но когда я пытаюсь вызвать метод "getClientID" получаю ошибку :

Код:
D:\autoIt\Object 117\activeX.au3 (15) : ==> The requested action with this object has failed.:
MsgBox(0,"Error",$viewRightControl.getClientID())
MsgBox(0,"Error",$viewRightControl.getClientID()^ ERROR

По идее эта ошибка значит что данного метода не существует, но я точно знаю что он есть, поскольку при подключении этой библиотеки через HTML метод корректно отрабатывает.
Вот почему я решил обратиться к местным гуру и спросить: что я делаю не так и может ли быть так что библиотека работает только из под HTML/JS?
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Re: [Ошибки] Не вызываются ActiveX методы

Код:
MsgBox(0,"Error",$viewRightControl.getClientID)
 
Автор
UnEpicFail

UnEpicFail

Новичок
Сообщения
24
Репутация
0
Re: [Ошибки] Не вызываются ActiveX методы

К сожалению результат тот же самый :(
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: [Ошибки] Не вызываются ActiveX методы

UnEpicFail
Что за ActiveX? Где взяли?
Дайте информацию. В стандартных ActiveX (в XP) не вижу.
 
Автор
UnEpicFail

UnEpicFail

Новичок
Сообщения
24
Репутация
0
Re: [Ошибки] Не вызываются ActiveX методы

ActiveX была получена от компании Verimatrix, и, к сожалению, я не могу вам ее дать.
Но если есть какие то конкретные вопросы по ней, я могу постараться на них ответить.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: [Ошибки] Не вызываются ActiveX методы

UnEpicFail [?]
Но если есть какие то конкретные вопросы по ней, я могу постараться на них ответить.
Для начала краткая справка по методу getClientID.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Re: [Ошибки] Не вызываются ActiveX методы

ViewRightActiveXControl.dll оно?
 
Автор
UnEpicFail

UnEpicFail

Новичок
Сообщения
24
Репутация
0
Re: [Ошибки] Не вызываются ActiveX методы

Этот метод возвращает некий ID, который автоматически присваивается этой ActiveX библиотекой.

Это доп инфа которую мне удалось выудить
это из офф. документации:

GetClientID
BSTR GetClientID();
Description
Used to request the machine’s client ID.
Parameters
None
Return
String representing the machine’s client ID.
e.g.GtcvrJjz3WOk3RucNQXWGjDkEDE=

это можно увидеть если нажать F3 в тоттал командоре на этом ActiveX файле
// Generated .IDL/C++ pseudo source equivalent of Win32 type library ..\ViewRightActiveXControlSDK.ocx
[
uuid({F53ABAB2-8A28-4C12-BE8A-95B576C241F5}),
version(1.0),
helpstring("ViewRightActiveXControlSDK ActiveX Control module"),
helpfile("ViewRightActiveXControlSDK.hlp"),
helpcontext(00000000)
]
library ViewRightActiveXControlSDKLib
{
// Forward references and typedefs
dispinterface _DViewRightActiveXControlSDK;
dispinterface _DViewRightActiveXControlSDKEvents;

[
uuid({D02B390F-492D-4D0C-B90F-7B08705D6EA8}),
helpstring("Dispatch interface for ViewRightActiveXControlSDK Control")
]
dispinterface _DViewRightActiveXControlSDK
{
properties:
methods:
[id(0), helpstring("method Open")] short Open(
BSTR mrl,
boolean UseQuickTune);
[id(1), helpstring("method Play")] short Play();
[id(2), helpstring("method Stop")] short Stop();
[id(3), helpstring("method Rewind")] short Rewind();
[id(4), helpstring("method FastForward")] short FastForward();
[id(5), helpstring("method SetPlayRate")] short SetPlayRate(double rate);
[id(6), helpstring("method GetPlayRate")] double GetPlayRate();
[id(7), helpstring("method Close")] short Close();
[id(8), helpstring("method Pause")] short Pause();
[id(9), helpstring("method SetMute")] short SetMute(boolean MuteOn);
[id(10), helpstring("method FullScreen")] short FullScreen(boolean FullScreen);
[id(11), helpstring("method SetPosition")] short SetPosition(uint64 position);
[id(12), helpstring("method GetPosition")] uint64 GetPosition();
[id(13), helpstring("method SetVolume")] short SetVolume(long volume);
[id(14), helpstring("method GetVolume")] long GetVolume();
[id(15), helpstring("method SetBalance")] short SetBalance(long balance);
[id(16), helpstring("method GetBalance")] long GetBalance();
[id(17), helpstring("method GetCurrentAudioChannel")] long GetCurrentAudioChannel();
[id(18), helpstring("method GetAudioChannelCount")] long GetAudioChannelCount();
[id(19), helpstring("method SwitchAudioTrack")] short SwitchAudioTrack(long channel);
[id(20), helpstring("method GetContentLength")] uint64 GetContentLength();
[id(21), helpstring("method GetDuration")] uint64 GetDuration();
[id(22), helpstring("method IsMuted")] boolean IsMuted();
[id(23), helpstring("method IsFullScreen")] boolean IsFullScreen();
[id(24), helpstring("method IsMediaSeekable")] boolean IsMediaSeekable();
[id(25), helpstring("method IsMediaSecure")] boolean IsMediaSecure();
[id(26), helpstring("method SetRTSPClientPort")] short SetRTSPClientPort(long port);
[id(27), helpstring("method GetClientID")] BSTR GetClientID();
[id(28), helpstring("method SetMulticastNetworkInterface")] short SetMulticastNetworkInterface(BSTR networkInterfaceIP);
[id(29), helpstring("method GetMulticastNetworkInterface")] BSTR GetMulticastNetworkInterface();
[id(30), helpstring("method GetNetworkInterfaces")] BSTR GetNetworkInterfaces();
[id(31), helpstring("method AbortOperation")] void AbortOperation();
[id(32), helpstring("method DVRGetAllowLiveBuffering")] boolean DVRGetAllowLiveBuffering();
[id(33), helpstring("method DVRAllowLiveBuffering")] short DVRAllowLiveBuffering(boolean allowLiveBuffering);
[id(34), helpstring("method DVRGetOptions")] BSTR DVRGetOptions();
[id(35), helpstring("method DVRSetOptions")] short DVRSetOptions(BSTR options);
[id(36), helpstring("method DVRGetMovieList")] BSTR DVRGetMovieList();
[id(37), helpstring("method DVRGetMovieInfo")] BSTR DVRGetMovieInfo(BSTR sessionUUID);
[id(38), helpstring("method DVRDelete")] short DVRDelete(BSTR sessionUUID);
[id(39), helpstring("method DVRModifyMovieInfo")] short DVRModifyMovieInfo(BSTR movieInfo);
[id(40), helpstring("method DVRRecord")] short DVRRecord(BSTR movieInfo);
[id(41), helpstring("method GetStatusCode")] long GetStatusCode();
[id(42), helpstring("method GetExceptionCode")] long GetExceptionCode();
[id(43), helpstring("method GetSDKVersion")] BSTR GetSDKVersion();
[id(44), helpstring("method GetVersion")] BSTR GetVersion();
[id(45), helpstring("method UnLoad")] void UnLoad();
[id(46), helpstring("method GetState")] BSTR GetState();
[id(47), helpstring("method SetAspectRatio")] short SetAspectRatio(double ar);
[id(48), helpstring("method GetAspectRatio")] double GetAspectRatio();
[id(49), helpstring("method SetHardwareDeinterlacing")] short SetHardwareDeinterlacing(boolean bUseHwDeinterlacing);
[id(50), helpstring("method GetHardwareDeinterlacing")] boolean GetHardwareDeinterlacing();
[id(51), helpstring("method SetDefaultAudioLanguage")] short SetDefaultAudioLanguage(BSTR defaultLanguage);
[id(52), helpstring("method GetDefaultAudioLanguage")] BSTR GetDefaultAudioLanguage();
[id(53), helpstring("method GetAudioTrackLanguage")] BSTR GetAudioTrackLanguage(long audioTrackIndex);
[id(54), helpstring("method SetClosedCaption")] short SetClosedCaption(boolean CCOn);
[id(55), helpstring("method GetClosedCaption")] boolean GetClosedCaption();
[id(56), helpstring("method SetDefaultSubtitleLanguage")] short SetDefaultSubtitleLanguage(BSTR defaultLanguage);
[id(57), helpstring("method GetDefaultSubtitleLanguage")] BSTR GetDefaultSubtitleLanguage();
[id(58), helpstring("method SwitchSubtitleTrack")] short SwitchSubtitleTrack(long channel);
[id(59), helpstring("method GetSubtitleTrackLanguage")] BSTR GetSubtitleTrackLanguage(long subtitleTrackIndex);
[id(60), helpstring("method GetSubtitleChannelCount")] long GetSubtitleChannelCount();
[id(61), helpstring("method GetCurrentSubtitleChannel")] long GetCurrentSubtitleChannel();
[id(62), helpstring("method GetAvailableContentLength")] uint64 GetAvailableContentLength();
};

[
uuid({FFEB0F70-AF2F-45B6-B829-29C6C8C47277}),
helpstring("Event interface for ViewRightActiveXControlSDK Control")
]
dispinterface _DViewRightActiveXControlSDKEvents
{
properties:
methods:
};

[
uuid({EF2DC3ED-655B-4CB8-BDC3-15D1BE52781B}),
helpstring("ViewRightActiveXControlSDK Control")
]
coclass ViewRightActiveXControlSDK
{
[default] dispinterface _DViewRightActiveXControlSDK;
[default, source] dispinterface _DViewRightActiveXControlSDKEvents;
};
};


Добавлено:
Сообщение автоматически объединено:


ViewRightActiveXControlSDK.ocx
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: [Ошибки] Не вызываются ActiveX методы

UnEpicFail
Это не краткая справка ;D
Ну да ладно. Вы её только в спойлер
spoiler.gif
поместите.
Предполагаю, что вам нужно для начала запустить клиент, ID которого вы собираетесь получить.
 
Автор
UnEpicFail

UnEpicFail

Новичок
Сообщения
24
Репутация
0
Re: [Ошибки] Не вызываются ActiveX методы

Предполагаю, что вам нужно для начала запустить клиент, ID которого вы собираетесь получить.

Хм, на самом деле ActiveX как раз генерирует этот ID. Когда я использовал его через HTML/JS я просто подключал ActiveX как объект и все.
<html>
<head>
<script>
function getCID(){
var CLIENT_ID = VC.GetClientID();
alert(CLIENT_ID);
}
</script>
</head>
<body onLoad = "getCID()">
<OBJECT ID="VC" CLASSID="CLSID:EF2DC3ED-655B-4CB8-BDC3-15D1BE52781B" width="1px" height="1px"></OBJECT>
</body>
</html>

код под спойлером замечательно отрабатывает.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: [Ошибки] Не вызываются ActiveX методы

Кстати, вы случайно не перепутали ProgID объекта?
Код:
;...
; у вас
;...
ObjCreate('VIEWRIGHTACTIVEX.ViewRightActiveXCtrl.1')
;...
; нужно
;...
ObjCreate('ViewRightActiveXControl.ViewRightCont.1')



Добавлено:
Сообщение автоматически объединено:

UnEpicFail [?]
на самом деле ActiveX как раз генерирует этот ID
Нет, вы ошибаетесь, он возвращает ID клиента.
 
Автор
UnEpicFail

UnEpicFail

Новичок
Сообщения
24
Репутация
0
Re: [Ошибки] Не вызываются ActiveX методы

копировал из реестра прям как там.
Если использовать
Код:
ViewRightActiveXControl.ViewRightCont.1
не проходит проверку на создание объекта
Код:
if not IsObj($viewRightControl) then



Добавлено:
Сообщение автоматически объединено:

Нет, вы ошибаетесь, он возвращает ID клиента.

Ок, я последовал вашей логике.
я запустил работающий скрипт на HTML/JS в браузере, проверил работоспособность метода GetClientID(), все работет
запустил AutoIt скрипт и получил точно ошибку на том же месте.

Мне кажется если бы не было клиента я бы получил в ответ null или undefined, возможно ноль или пустое место но ни как ошибку говорящую что у объекта нет этого метода :(
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: [Ошибки] Не вызываются ActiveX методы

UnEpicFail [?]
но ни как ошибку говорящую что у объекта нет этого метода
Ошибка говорит о том что "действие (посредством метода getClientID) с объектом завершилось неудачей".
 
Автор
UnEpicFail

UnEpicFail

Новичок
Сообщения
24
Репутация
0
Re: [Ошибки] Не вызываются ActiveX методы

Ошибка говорит о том что "действие (посредством метода getClientID) с объектом завершилось неудачей".

Ок. Согласен.

P.S. есть ли в AutoIt способ получить список всех методов и свойств у объекта?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: [Ошибки] Не вызываются ActiveX методы

UnEpicFail
Вместо «Не вызываются ActiveX методы» тему лучше было бы назвать так: «Не вызываются ActiveX методы в объекте ViewRightActiveXControl».
Потому что «Не вызываются ActiveX методы» подразумивает все объекты, а это не так.

[?]
есть ли в AutoIt способ получить список всех методов и свойств у объекта?
У меня раньше это работало:

Код:
#include <Array.au3>

$oObj = ObjCreate('Scripting.FileSystemObject') ;Sample object (RICHTEXT.RichtextCtrl.1)
$aObj_Members = _ObjGetMembers($oObj, 1)

If IsArray($aObj_Members) Then
	_ArrayDisplay($aObj_Members)
	
	;16 should be .GetTempName
	ConsoleWrite(Execute("$oObj." & $aObj_Members[16]) & @CRLF)
EndIf

Func _ObjGetMembers($oObj, $iRetType = 0)
	If Not IsObj($oObj) Then Return SetError(-1, 0, 0)
	
	Local $oTLA = ObjCreate("TLI.TLIApplication")
	
	If Not IsObj($oTLA) Then
		Return SetError(1)
	EndIf
	
	Local $objInterface = $oTLA.InterfaceInfoFromObject($oObj)
	Local $oMembers = $objInterface.Members
	Local $sRet_Members = ""
	
	For $iMember In $oMembers
		$sRet_Members &= $iMember.Name & @CRLF
	Next
	
	$sRet_Members = StringStripWS($sRet_Members, 3)
	
	If $iRetType = 1 Then Return StringSplit($sRet_Members, @CRLF, 1)
	Return $sRet_Members
EndFunc


Теперь почему то уже нет :(
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: [Ошибки] Не вызываются ActiveX методы

В общем, вам нужно для начала, запустить клиент. Который в свою очередь должен лежать в той папке, путь к которой у вас прописан в реестре.
Это единственная причина, других я не вижу.
Проанализируйте внимательно все свои действия.

Кстати, там же желательно зарегистрировать и ViewRightActiveXControl
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: [Ошибки] Не вызываются ActiveX методы

А если попробовать так:

Код:
MsgBox(0, "Error", Execute('$viewRightControl.getClientID()')


?
:scratch:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: [Ошибки] Не вызываются ActiveX методы

Открывайте "Диспетчер задач" и убивайте процесс ViewRight, который, скорее всего, висит ;)
ViewRightActiveXControl при вызове метода GetClientID сам находит плеер в папке, путь к которой прописан в реестре, и запускает его! После чего переводит фокус на процесс, и выполняет метод GetClientID. Далее ViewRightActiveXControl сам убивает процесс!
Но! Если в момент вызова метода произошла ошибка, процесс остается висеть!

Странный объект :scratch:
Могли бы написать функцию IsViewRightLoad
Вот вам приме. Sleep я поставил на глаз, меньше не рекомендую.
Код:
Dim $oRightControl= ObjCreate('ViewRightActiveXControl.ViewRightCont.1')
If Not IsObj($oRightControl) Then 
    Msgbox(0,"Error","Create Object failed.")
EndIf
ConsoleWrite("Created Object --> " & ObjName($oRightControl) & @CRLF)
While Not ProcessExists("ViewRight.exe")
	Sleep(4000)
	ConsoleWrite($oRightControl.GetClientID & @CRLF)
WEnd
 
Автор
UnEpicFail

UnEpicFail

Новичок
Сообщения
24
Репутация
0
Re: [Ошибки] Не вызываются ActiveX методы

Интересные идеи, спасибо, обязательно попробую завтра как только попаду а работу.
 
Автор
UnEpicFail

UnEpicFail

Новичок
Сообщения
24
Репутация
0
А если попробовать так:

Код: AutoIt [Выделить]
MsgBox(0, "Error", Execute('$viewRightControl.getClientID()')

?
:scratch:

Код:
D:\autoIt\Object 117\activeX.au3 (16) : ==> Error parsing function call.:
MsgBox(0, "Error", Execute('$viewRightControl.getClientID()')
MsgBox(0, "Error", Execute('$viewRightControl.getClientID()'^ ERROR

Открывайте "Диспетчер задач" и убивайте процесс ViewRight, который, скорее всего, висит ;)

нет, не висит. процесс ViewRight.exe появляется только при запуске плеера ViewRight )))




Добавлено:
Сообщение автоматически объединено:

В общем, вам нужно для начала, запустить клиент. Который в свою очередь должен лежать в той папке, путь к которой у вас прописан в реестре.
Это единственная причина, других я не вижу.
Проанализируйте внимательно все свои действия.
Давайте по порядку.
Во первых ActiveX и есть клиент.
Во вторых структура папок и файлов не измене, все точно как поставляется производителем продукта.
Кстати, там же желательно зарегистрировать и ViewRightActiveXControl
Естественно библиотека зарегистрирована, она регистрируется автоматически при установке продукта, и еще она же работает если ее подключать через HTML.


И еще один небольшой нюанс, когда я запускаю скрипт на AutoIt я вижу в логах удачное общение клиента и сервера. Соответственно клиент нормально подымается и готов к работе, но вот методы не вызываются.
 
Верх