Главная страница
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.48 MB
Время: 0.012 c
15-1249989451
TUser
2009-08-11 15:17
2009.10.11
Экзопланеты и другие астрономические открытия


15-1250063545
brother
2009-08-12 11:52
2009.10.11
Где найти newton headers?


15-1249613874
Дмитрий С
2009-08-07 06:57
2009.10.11
Как подключить слабые колонки к сильному усилителю?


9-1182245762
Домик
2007-06-19 13:36
2009.10.11
Как из двух изображений получить TGA с альфа каналом?


15-1249707770
Savek
2009-08-08 09:02
2009.10.11
Браузер