-
Здравствуйте, 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;
Большое Спасибо!
-
var port:variant; begin if CommPort.Open(port) then CommPort.myComm_setup(port,2,'at');
|