Нюансы вставки ActiveX-компонента:
- Только пассивный элемент, только отображение.
- Только настольные операционные системы: Windows XP, 7 и старше.
- Не работает под Windows CE и другие Сompact версии.
- Основная цель - вставка компонента отображения HTML-страниц (Microsoft WebBrowser), но можно и другие.
На вкладке Methodcalls сосредоточены настройки вызова различных методов интерфейса ActiveX-компонента:
Webbrowser
Вкладка для компонентов, поддерживающих интерфейс IWebBrowser:
- Variable for URL - переменная, содержащая строку адреса веб-сайта (URL).
- Condition for call - старт загрузки html-страницы по переднему фронту TRUE, заданной переменной. Если переменная не задана - компонент будет обновляться каждый цикл ПЛК! Лучше - задать.
Additional Call
Позволяет настроить вызов других методов ActiveX-компонента:
- Dll for Call - полный путь к DLL-файлу, который в свою очередь будет вызывать какие-то методы компонента.
- Methodidentification - строка, содержащая название метода, который будет вызываться внутри DLL. Это не само название метода, а подсказка для внутренностей DLL-библиотеки - что необходимо делать (см. пример ниже).
- Parameter - дополнительные параметры для передачи в DLL-библиотеку.
- Condition for call - старт вызова по переднему фронту заданной переменной.
DLL-библиотека должна экспортировать функцию ExecuteActiveXCall:
void ExecuteActiveXCall(IUnknown* pUnk, char* pszId, char* pszParam, char* pszReturnBuffer, int nReturnBufferSize, DWORD* pdwReturnFlag);
- pszId - строка из переменной Methodidentification.
- pszParam - строка из переменной Parameter.
- pUnk - ссылка на интерфейс для работы с методами ActiveX-компонента.
- pszReturnBuffer, nReturnBufferSize и pdwReturnFlag - не используются.
Пример DLL-библиотеки
Данный пример показывает, как может выглядеть простейшая DLL-библиотека, позволяющая вызывать другие методы ActiveX-компонента. Здесь GoBack и GoForward позволяют переходить на страницу вперед или на страницу назад, при условии, что компонент поддерживает интерфейс IWebBrowser.
Названия IWebBrowser|GoBack и IWebBrowser|GoForward никак не связаны с названиями методов компонента. Разработчик может использовать произвольные, удобные для него названия:
#include "stdafx.h" #include <unknwn.h> #include <exdisp.h> BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } extern "C" __declspec (dllexport) void ExecuteActiveXCall(IUnknown* pUnk, char* pszId, char* pszParam, char* pszReturnBuffer, int nReturnBufferSize, DWORD* pdwReturnFlag) { if (strcmp(pszId, "IWebBrowser|GoBack") == 0) { IUnknown* pNewUnk; IWebBrowser* pwb; pUnk->QueryInterface(IID_IWebBrowser, (void**) &pNewUnk); pwb = (IWebBrowser*) pNewUnk; if (pwb) { pwb->GoBack(); pwb->Release(); } } else { if (strcmp(pszId, "IWebBrowser|GoForward") == 0) { IUnknown* pNewUnk; IWebBrowser* pwb; pUnk->QueryInterface(IID_IWebBrowser, (void**) &pNewUnk); pwb = (IWebBrowser*) pNewUnk; if (pwb) { pwb->GoForward(); pwb->Release(); } } } }
Функция добавления ActiveX-компонента - это стандартная функция CoDeSys PLC Control; она может использоваться и в контроллерах других производителей.