Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.11;
Скачать: CL | DM;

Вниз

Реализация методов 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 вся ветка

Текущий архив: 2009.10.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
15-1249996943
Алекс Юстасу
2009-08-11 17:22
2009.10.11
Интересные ветки


3-1228129957
zorik
2008-12-01 14:12
2009.10.11
Firebird 2.0 to Firebird 1.5


2-1248613364
_Татьяна_
2009-07-26 17:02
2009.10.11
Какой параметр использовать в функции?


11-1206025013
andreil
2008-03-20 17:56
2009.10.11
Stream2Stream на АСМе?


4-1218097016
demon
2008-08-07 12:16
2009.10.11
Сменить фон ListBox a