Форум: "Corba";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];
ВнизРеализация методов IDispatch Найти похожие ветки
← →
cloix © (2006-10-09 11:38) [0]Здравствуйте, ALL!
Застопорился на такой проблеме.
Имеется чужая библиотека MyCommPort.dll, написанная на Visual Basic 6.
Из документации к dll:
DLL библиотека реализована в виде класса (class) в составе функций:
myCoin_setup(mycoin_type As String) As Boolean;
myComm_setup(myport_number As Long, myport_setting As String) As Boolean;
myComm_status(myport_number As Long, myport_setting As String, mybuffer_size As Long, myport_open As Boolean) As Boolean;
PSCOMM_Open()As Boolean;
PSCOMM_Close()As Boolean;
myComm_poll(mycoin_number As Long, mycredit_value As Long, mytype_count As String) As Boolean;
----------- Конец документации -----------------
Регистрирую библиотеку в системе, и в новый проект делаю импорт библиотеки (Project --> Import Type Lidrary). На панели ActiveX появился новый компонент PSCommPort. Перетянул Этот компонент на форму и попытался вызвать функцию PSCommPort1.myComm_setup этого компонента, но функция описана(из подсказки "Знатока кода") как:
myComm_setup(var myComm: IDispatch; var myport_number: Integer; var myport_setting: WideString): WordBool;
Что это за myComm типа IDispatch? Как мне его описать? Как правильно вызвать функцию PSCommPort1.myComm_setup?
Для чего использовать интерфейс IDispatch при вызове метода этого интерфейса, причем, как параметр метода, если интерфейс IDispatch позволяет обращаться к методам непосредственно по имени?
В файле imports/MyCommPort_TLB.pas нашел описание интерфейсов:
// *********************************************************************//
// Forward declaration of types defined in TypeLibrary
// *********************************************************************//
_PSCommPort = interface;
_PSCommPortDisp = dispinterface;
// *********************************************************************//
// Declaration of CoClasses defined in Type Library
// (NOTE: Here we map each CoClass to its Default Interface)
// *********************************************************************//
PSCommPort = _PSCommPort;
// *********************************************************************//
// Interface: _PSCommPort
// Flags: (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
// GUID: {DE6686CB-682D-4DEE-8827-68FAD790474B}
// *********************************************************************//
_PSCommPort = interface(IDispatch)
["{DE6686CB-682D-4DEE-8827-68FAD790474B}"]
function myComm_status(var myComm: IDispatch; var myport_number: Integer;
var myport_setting: WideString; var mybuffer_size: Integer;
var myport_open: WordBool): WordBool; safecall;
function myComm_setup(var myComm: IDispatch; var myport_number: Integer;
var myport_setting: WideString): WordBool; safecall;
function myCoin_setup(var coin_type: WideString): WordBool; safecall;
function PSCOMM_Open(var myComm: IDispatch): WordBool; safecall;
function PSCOMM_Close(var myComm: IDispatch): WordBool; safecall;
function myComm_poll(var myComm: IDispatch; var mycoin_number: Integer;
var mycredit_value: Integer; var mytype_count: WideString;
var status_poll: WideString): WordBool; safecall;
end;
// *********************************************************************//
// DispIntf: _PSCommPortDisp
// Flags: (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
// GUID: {DE6686CB-682D-4DEE-8827-68FAD790474B}
// *********************************************************************//
_PSCommPortDisp = dispinterface
["{DE6686CB-682D-4DEE-8827-68FAD790474B}"]
function myComm_status(var myComm: IDispatch; var myport_number: Integer;
var myport_setting: WideString; var mybuffer_size: Integer;
var myport_open: WordBool): WordBool; dispid 1610809344;
function myComm_setup(var myComm: IDispatch; var myport_number: Integer;
var myport_setting: WideString): WordBool; dispid 1610809345;
function myCoin_setup(var coin_type: WideString): WordBool; dispid 1610809346;
function PSCOMM_Open(var myComm: IDispatch): WordBool; dispid 1610809347;
function PSCOMM_Close(var myComm: IDispatch): WordBool; dispid 1610809348;
function myComm_poll(var myComm: IDispatch; var mycoin_number: Integer;
var mycredit_value: Integer; var mytype_count: WideString;
var status_poll: WideString): WordBool; dispid 1610809349;
end;
Большое Спасибо!
← →
Slym © (2006-10-09 13:39) [1]var port:variant;
begin
if CommPort.Open(port) then
CommPort.myComm_setup(port,2,"at");
Страницы: 1 вся ветка
Форум: "Corba";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c