Доступ к 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);

}