我现在拿到了硬件提供商的API,是Com形式封装的,因为对应的文档资料没有提供For Delphi的说明,我弄了很久,现在是可以使用里面的API函数了,但Dll触发的事件无法获得,从而没法做进一步的处理,请那位Delphi高手指点指点,如何解决Dll的事件触发问题,十万火急!该Dll被使用时,客户程序会调用Dll提供的API函数等、或者硬件设备有相关动作时,Dll会触发一个事件,我知道要里面触发事件的接口,但不知道如何使用,事件接口如下:
  __IMoagent = dispinterface
    ['{854D8014-FD7E-11D6-95E6-009027AE39E9}']
    procedure MosaixEvent(ErrFlag: WordBool; const NotifyType: WideString; 
                          const MosaixDataPacket: WideString; const ErrCode: WideString; 
                          const ErrText: WideString); dispid 1;
  end;
通过Delphi的Import Type Library..工具引用该Dll注册文件(moagent32.dll)并Create Unit产生的TLB文件:Moagent32_TLB.pas 的完整代码如下:或者在这里下载 http://210.77.127.81/code/Moagent32_TLB.pas
/////////////////////////////////////////////////////////////////////unit Moagent32_TLB;// ************************************************************************ //
// WARNING                                                                    
// -------                                                                    
// The types declared in this file were generated from data read from a       
// Type Library. If this type library is explicitly or indirectly (via        
// another type library referring to this type library) re-imported, or the   
// 'Refresh' command of the Type Library Editor activated while editing the   
// Type Library, the contents of this file will be regenerated and all        
// manual modifications will be lost.                                         
// ************************************************************************ //// PASTLWTR : $Revision:   1.130.1.0.1.0.1.6  $
// File generated on 2003-10-10 17:39:07 from Type Library described below.// ************************************************************************  //
// Type Lib: C:\WINNT\system32\Moagent32.dll (1)
// LIBID: {8B2E390C-0D3E-11D3-A7F9-00A0C976D0E9}
// LCID: 0
// Helpfile: 
// DepndLst: 
//   (1) v2.0 stdole, (C:\WINNT\SYSTEM32\STDOLE2.TLB)
//   (2) v4.0 StdVCL, (C:\WINNT\System32\stdvcl40.dll)
// Errors:
//   Hint: Parameter 'Unit' of _IMoagent.SetUnit changed to 'Unit_'
//   Error creating palette bitmap of (TICallBk) : Server C:\WINNT\system32\Moagent32.dll contains no icons
//   Error creating palette bitmap of (TIServerStartup) : Server C:\WINNT\system32\Moagent32.dll contains no icons
// ************************************************************************ //
// *************************************************************************//
// NOTE:                                                                      
// Items guarded by $IFDEF_LIVE_SERVER_AT_DESIGN_TIME are used by properties  
// which return objects that may need to be explicitly created via a function 
// call prior to any access via the property. These items have been disabled  
// in order to prevent accidental use from within the object inspector. You   
// may enable them by defining LIVE_SERVER_AT_DESIGN_TIME or by selectively   
// removing them from the $IFDEF blocks. However, such items must still be    
// programmatically created via a method of the appropriate CoClass before    
// they can be used.                                                          
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. 
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interfaceuses Windows, ActiveX, Classes, Graphics, OleServer, StdVCL, Variants;
  // *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:        
//   Type Libraries     : LIBID_xxxx                                      
//   CoClasses          : CLASS_xxxx                                      
//   DISPInterfaces     : DIID_xxxx                                       
//   Non-DISP interfaces: IID_xxxx                                        
// *********************************************************************//
const
  // TypeLibrary Major and minor versions
  Moagent32MajorVersion = 1;
  Moagent32MinorVersion = 1;  LIBID_Moagent32: TGUID = '{8B2E390C-0D3E-11D3-A7F9-00A0C976D0E9}';  IID__IConfigure: TGUID = '{8B2E3913-0D3E-11D3-A7F9-00A0C976D0E9}';
  CLASS_IConfigure: TGUID = '{8B2E3914-0D3E-11D3-A7F9-00A0C976D0E9}';
  IID__ICallBk: TGUID = '{8B2E3919-0D3E-11D3-A7F9-00A0C976D0E9}';
  CLASS_ICallBk: TGUID = '{8B2E391A-0D3E-11D3-A7F9-00A0C976D0E9}';
  IID__IMoagent: TGUID = '{854D8013-FD7E-11D6-95E6-009027AE39E9}';
  DIID___IMoagent: TGUID = '{854D8014-FD7E-11D6-95E6-009027AE39E9}';
  IID__IServerStartup: TGUID = '{8B2E391E-0D3E-11D3-A7F9-00A0C976D0E9}';
  CLASS_IServerStartup: TGUID = '{8B2E391F-0D3E-11D3-A7F9-00A0C976D0E9}';
  CLASS_IMoagent: TGUID = '{8B2E391C-0D3E-11D3-A7F9-00A0C976D0E9}';
type// *********************************************************************//
// Forward declaration of types defined in TypeLibrary                    
// *********************************************************************//
  _IConfigure = interface;
  _IConfigureDisp = dispinterface;
  _ICallBk = interface;
  _ICallBkDisp = dispinterface;
  _IMoagent = interface;
  _IMoagentDisp = dispinterface;
  __IMoagent = dispinterface;
  _IServerStartup = interface;
  _IServerStartupDisp = dispinterface;// *********************************************************************//
// Declaration of CoClasses defined in Type Library                       
// (NOTE: Here we map each CoClass to its Default Interface)              
// *********************************************************************//
  IConfigure = _IConfigure;
  ICallBk = _ICallBk;
  IServerStartup = _IServerStartup;
  IMoagent = _IMoagent;

解决方案 »

  1.   

    // *********************************************************************//
    // Declaration of structures, unions and aliases.                         
    // *********************************************************************//  IMoagent___v0 = _IMoagent; // *********************************************************************//
    // Interface: _IConfigure
    // Flags:     (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
    // GUID:      {8B2E3913-0D3E-11D3-A7F9-00A0C976D0E9}
    // *********************************************************************//
      _IConfigure = interface(IDispatch)
        ['{8B2E3913-0D3E-11D3-A7F9-00A0C976D0E9}']
        function Get_GetCreateErrFile: WordBool; safecall;
        function Get_GetCreateLogFile: WordBool; safecall;
        function Get_GetErrFileName: WideString; safecall;
        function Get_GetLogFileName: WideString; safecall;
        function Get_GetLogonRecovery: WordBool; safecall;
        function Get_GetLogonTimeout: Integer; safecall;
        function Get_GetMosaixTimeout: Integer; safecall;
        function Get_GetNumOfLstErrs: Smallint; safecall;
        function Get_GetResConnHead: WordBool; safecall;
        function Get_GetStatFileName: WideString; safecall;
        function Get_GetUseDllDbs: WordBool; safecall;
        procedure Set_SetLogonTimeout(Param1: Integer); safecall;
        procedure Set_SetMosaixTimeout(Param1: Integer); safecall;
        procedure Set_SetErrFileName(const Param1: WideString); safecall;
        procedure Set_SetCreateErrFile(Param1: WordBool); safecall;
        procedure Set_SetLogonRecovery(Param1: WordBool); safecall;
        procedure Set_SetLogFileName(const Param1: WideString); safecall;
        procedure Set_SetCreateLogFile(Param1: WordBool); safecall;
        procedure Set_SetNumOfLstErrs(Param1: Smallint); safecall;
        procedure Set_SetReserveConnHeadset(Param1: WordBool); safecall;
        procedure Set_SetUseDllDbs(Param1: WordBool); safecall;
        property GetCreateErrFile: WordBool read Get_GetCreateErrFile;
        property GetCreateLogFile: WordBool read Get_GetCreateLogFile;
        property GetErrFileName: WideString read Get_GetErrFileName;
        property GetLogFileName: WideString read Get_GetLogFileName;
        property GetLogonRecovery: WordBool read Get_GetLogonRecovery;
        property GetLogonTimeout: Integer read Get_GetLogonTimeout;
        property GetMosaixTimeout: Integer read Get_GetMosaixTimeout;
        property GetNumOfLstErrs: Smallint read Get_GetNumOfLstErrs;
        property GetResConnHead: WordBool read Get_GetResConnHead;
        property GetStatFileName: WideString read Get_GetStatFileName;
        property GetUseDllDbs: WordBool read Get_GetUseDllDbs;
        property SetLogonTimeout: Integer write Set_SetLogonTimeout;
        property SetMosaixTimeout: Integer write Set_SetMosaixTimeout;
        property SetErrFileName: WideString write Set_SetErrFileName;
        property SetCreateErrFile: WordBool write Set_SetCreateErrFile;
        property SetLogonRecovery: WordBool write Set_SetLogonRecovery;
        property SetLogFileName: WideString write Set_SetLogFileName;
        property SetCreateLogFile: WordBool write Set_SetCreateLogFile;
        property SetNumOfLstErrs: Smallint write Set_SetNumOfLstErrs;
        property SetReserveConnHeadset: WordBool write Set_SetReserveConnHeadset;
        property SetUseDllDbs: WordBool write Set_SetUseDllDbs;
      end;// *********************************************************************//
    // DispIntf:  _IConfigureDisp
    // Flags:     (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
    // GUID:      {8B2E3913-0D3E-11D3-A7F9-00A0C976D0E9}
    // *********************************************************************//
      _IConfigureDisp = dispinterface
        ['{8B2E3913-0D3E-11D3-A7F9-00A0C976D0E9}']
        property GetCreateErrFile: WordBool readonly dispid 1745027095;
        property GetCreateLogFile: WordBool readonly dispid 1745027094;
        property GetErrFileName: WideString readonly dispid 1745027092;
        property GetLogFileName: WideString readonly dispid 1745027091;
        property GetLogonRecovery: WordBool readonly dispid 1745027090;
        property GetLogonTimeout: Integer readonly dispid 1745027089;
        property GetMosaixTimeout: Integer readonly dispid 1745027088;
        property GetNumOfLstErrs: Smallint readonly dispid 1745027087;
        property GetResConnHead: WordBool readonly dispid 1745027086;
        property GetStatFileName: WideString readonly dispid 1745027085;
        property GetUseDllDbs: WordBool readonly dispid 1745027084;
        property SetLogonTimeout: Integer writeonly dispid 1745027083;
        property SetMosaixTimeout: Integer writeonly dispid 1745027082;
        property SetErrFileName: WideString writeonly dispid 1745027081;
        property SetCreateErrFile: WordBool writeonly dispid 1745027078;
        property SetLogonRecovery: WordBool writeonly dispid 1745027077;
        property SetLogFileName: WideString writeonly dispid 1745027076;
        property SetCreateLogFile: WordBool writeonly dispid 1745027075;
        property SetNumOfLstErrs: Smallint writeonly dispid 1745027074;
        property SetReserveConnHeadset: WordBool writeonly dispid 1745027073;
        property SetUseDllDbs: WordBool writeonly dispid 1745027072;
      end;// *********************************************************************//
    // Interface: _ICallBk
    // Flags:     (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
    // GUID:      {8B2E3919-0D3E-11D3-A7F9-00A0C976D0E9}
    // *********************************************************************//
      _ICallBk = interface(IDispatch)
        ['{8B2E3919-0D3E-11D3-A7F9-00A0C976D0E9}']
        procedure MosaixCBNotify(ErrFlag: WordBool; const NotifyType: WideString; 
                                 const MosaixDataPacket: WideString; const ErrCode: WideString; 
                                 const ErrText: WideString); safecall;
      end;
      

  2.   

    // *********************************************************************//
    // DispIntf:  _ICallBkDisp
    // Flags:     (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
    // GUID:      {8B2E3919-0D3E-11D3-A7F9-00A0C976D0E9}
    // *********************************************************************//
      _ICallBkDisp = dispinterface
        ['{8B2E3919-0D3E-11D3-A7F9-00A0C976D0E9}']
        procedure MosaixCBNotify(ErrFlag: WordBool; const NotifyType: WideString; 
                                 const MosaixDataPacket: WideString; const ErrCode: WideString; 
                                 const ErrText: WideString); dispid 1610809344;
      end;// *********************************************************************//
    // Interface: _IMoagent
    // Flags:     (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
    // GUID:      {854D8013-FD7E-11D6-95E6-009027AE39E9}
    // *********************************************************************//
      _IMoagent = interface(IDispatch)
        ['{854D8013-FD7E-11D6-95E6-009027AE39E9}']
        function Get_MosaixCallBk: _ICallBk; safecall;
        procedure GhostMethod__IMoagent_32_0; safecall;
        procedure _Set_MosaixCallBk(const MosaixCallBk: _ICallBk); safecall;
        procedure DisEngageCallBk; safecall;
        procedure DisplayLastErrors(NumOfErrsToDisplay: Smallint); safecall;
        function DoNotCall(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        procedure EngageCallBk(var CBkPtr: _ICallBk); safecall;
        procedure FlowDiagram; safecall;
        procedure DisplayAgentStats; safecall;
        procedure GetCallNotify(var NotifyType: WideString; var DataPacket: WideString); safecall;
        function ListCallFields(const ListName: WideString; var FieldList: WideString; 
                                var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function LogIoStart(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function AdjustHeadset(const Setting: WideString; const NewVolumn: WideString; 
                               var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ClearDataSet(const WkCls: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ConnHeadset(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function DialDigit(const Digit: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function DisconnHeadset(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function DumpData(const FileName: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function EchoOff(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function EchoOn(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function FreeHeadset(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function GetHeadsetVol(var Settings: WideString; var ErrCode: WideString; 
                               var ErrText: WideString): WordBool; safecall;
        procedure GetLastErrors(var NumOfErrsToList: Integer; var ErrList: PSafeArray); safecall;
        function HangupCall(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function HoldCall(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function HookflashLine(const PhoneNumber: WideString; var ErrCode: WideString; 
                               var ErrText: WideString): WordBool; safecall;
        function ListCallbackFmt(var CallbkFmt: WideString; var ErrCode: WideString; 
                                 var ErrText: WideString): WordBool; safecall;
        function ListCallLists(var CallList: WideString; var ErrCode: WideString; 
                               var ErrText: WideString): WordBool; safecall;
        function ListDataFields(const ListType: WideString; var DataFieldsMsg: WideString; 
                                var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ListJobs(const typeOfJobToList: WideString; var JobList: WideString; 
                          var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ListKeys(var KeysList: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ListState(var State: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ListUnits(var UnitList: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function LogIoStop(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function LogoffAcd(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function LogonAcd(const Extension: WideString; const PbxID: WideString; 
                          var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ManagedCall(var Connect: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ManualCall(const NumToCall: WideString; var ErrCode: WideString; 
                            var ErrText: WideString): WordBool; safecall;
        function MoFlashBlind(const JobName: WideString; var ErrCode: WideString; 
                              var ErrText: WideString): WordBool; safecall;
        function MoFlashSupv(const JobName: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function NoFurtherWork(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function AvailWork(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function FinishedItem(const FICode: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function AttachJob(const JobName: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function DetachJob(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function Logoff(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
      

  3.   

    function Logon(const ServerName: WideString; PortNumber: Integer; const UserID: WideString; 
                       const PassWrd: WideString; const Headset: WideString; var ErrCode: WideString; 
                       var ErrText: WideString): WordBool; safecall;
        function ReadField(const ListType: WideString; const FieldName: WideString; 
                           var FieldInfo: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ReadyNextItem(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ReleaseLine(const ScriptNo: WideString; const MessageNo: WideString; 
                             var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ReserveHeadset(const HeadsetID: WideString; var ErrCode: WideString; 
                                var ErrText: WideString): WordBool; safecall;
        function SendMessage(const Message: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function SetCallback(const CallBackDate: WideString; const Time: WideString; 
                             const PhoneIndx: WideString; const RefName: WideString; 
                             const ManualPhNum: WideString; var ErrCode: WideString; 
                             var ErrText: WideString): WordBool; safecall;
        function SetDataField(const WkCls: WideString; const FieldName: WideString; 
                              var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function SetNotifyKeyField(const WkCls: WideString; const FieldName: WideString; 
                                   var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function SetPassword(const UserID: WideString; const PresentPW: WideString; 
                             const NewPW: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function SetUnit(const Unit_: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function SetWorkClass(const WkCls: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function TransferCall(const PhoneNum: WideString; var ErrCode: WideString; 
                              var ErrText: WideString): WordBool; safecall;
        function UnholdCall(var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function UpdateField(const WkCls: WideString; const FieldName: WideString; 
                             var NewValue: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ListScreens(const callDirection: WideString; var ScreenList: WideString; 
                             var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function GetScreen(const screenName: WideString; var ScreenDef: WideString; 
                           var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        function ListKeysEx(var KeysList: WideString; var ErrCode: WideString; var ErrText: WideString): WordBool; safecall;
        property MosaixCallBk: _ICallBk read Get_MosaixCallBk write _Set_MosaixCallBk;
      end;
      

  4.   

    连续发了三次都不能贴完,所以TLB的源代码请下载来看,谢谢下载地址: http://210.77.127.81/code/Moagent32_TLB.pas注:上面的地址链接区分大小写
      

  5.   

    csdn 的发贴限制太 严了,不好!
      

  6.   

    上面提到的问题我判断是主要是涉及到自动化事件的接口的使用,我Delphi不是熟,不知道怎么使用,请大侠指点!
      

  7.   

    问题解决,参考《DELPHI5开发指南》23章