Конференция "Corba" » Реализация методов IDispatch [Delphi, Windows]
 
  • cloix © (09.10.06 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 © (09.10.06 13:39) [1]
    var port:variant;
    begin
    if CommPort.Open(port) then
     CommPort.myComm_setup(port,2,'at');
 
Конференция "Corba" » Реализация методов IDispatch [Delphi, Windows]
Есть новые Нет новых   [134464   +62][b:0][p:0]