Доступ к ActiveX из script'a
Юрий
Оганесян; 2.10.02
Добрый день!
Можно ли вызвать МЕТОД внедренного на страницу WinCC "чужого"
ActiveX-control'a? И как...?
Re: Доступ к ActiveX из script'a
Евгений Трунов;
2.10.02
А если использовать вот это из pdlrtapi.h:
BOOL WINAPI PDLRTInvoke(
ADRMODE adrMode,
LPCSTR lpszPictureName,
LPCSTR lpszObjectName,
LPCSTR lpszMetName,
VARTYPE vtRet,
LPVOID pvRet,
DISPPARAMS* pDisp,
PDLRT_CALLBACKA pfn,
LPVOID pvUser,
PCMN_ERRORA pError
);
Re: Доступ к ActiveX из script'a
Юрий
Оганесян; 4.10.02
А где можно посмотреть описание этой функции?
В ".h" файле она действительно есть, но я не смог найти ее описание
в ODK.
Re: Доступ к ActiveX из script'a
Евгений Трунов;
7.10.02
А нигде :). Её там и нет. Жизнь, как известно, это борьба с
трудностями.
Но сама по себе эта функция - классический IDispatch::Invoke(), с
поправкой на WinCC-шные реалии. Invoke() подробнейшим образом
описан в любом учебнике по OLE-автоматизации.
Re: Доступ к ActiveX из script'a
Sergey G. Shestakov; 11.10.02
Самое смешное... Можно доступится ко многим методам стандартных
ActiveX. Я , например, много раз использовал методы ComboBox и
ListBox, и даже подключил через OLE MS Excel. К несчастью, я
обнаруживаю, что со временем это дает сбои в работе Global Script.
Скорее всего проблемы не в WinCC конкретно, а в механизмах
взаимодействия Windows.На мой взгляд, кажется, разработчикам WinCC
пора бы сменить платформу, и переходить, может быть на Unix, или
что-нибудь подобное. Это мое, может быть субъективное
мнение....
Re: Доступ к ActiveX из script'a
Костенич Дмиртий; 25.10.02
Эта тема обсуждалась в прошлом году. Впрочем, можно и напмнить
(привожу пример):
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char*
lpszPropertyName)
{
#define GetObjectA GetObject
__object *obj = NULL, *pic = NULL, *ocx = NULL;
obj= __object_create("PDLRuntime");
if(!obj)
{
printf("obj = NULL\r\n");
return;
}
pic = obj->GetPicture("NewPdl0");
if( pic == NULL){
__object_delete(obj);
printf("pic != NULL\r\n");
return;
}
ocx=pic->GetObject("OLE Control1");
if( ocx == NULL){
printf("ocx = NULL\r\n");
__object_delete(obj);
__object_delete(pic);
return;
}
ocx->AboutBox();
__object_delete(obj);
__object_delete(pic);
__object_delete(ocx);
}