Конференция "Corba" » Подключение к событиям COM объекта [Delphi, Windows]
 
  • decoding (27.11.10 18:19) [0]
    Мастера, помогите.

    Работаю в Word через OLE.


    var
     W: OleVariant;

    W := CreateOleObject( 'Word.Document' );



    Возникла необходимость подключиться к событиям ворда. Для этого решил использовать модуль SinkObject от Binh Ly.

    Сделал от него наследника

     TWordSink = class(TBaseSink)
     private
     protected
       function DoInvoke (DispID: Integer; const IID: TGUID; LocaleID: Integer;
         Flags: Word; var dps : TDispParams; pDispIds : PDispIdList;
         VarResult, ExcepInfo, ArgErr: Pointer): HResult; override;
     public
       constructor Create;  virtual;
       constructor CreateConnected(pSource : IUnknown);  virtual;
     end;

    constructor TWordSink.Create;
    begin
     inherited Create;
     FSinkIID := DocumentEvents;
    end;

    constructor TWordSink.CreateConnected(pSource: IInterface);
    begin
     Create;
     Connect( pSource );
    end;

    function TWordSink.DoInvoke(DispID: Integer; const IID: TGUID;
     LocaleID: Integer; Flags: Word; var dps: TDispParams; pDispIds: PDispIdList;
     VarResult, ExcepInfo, ArgErr: Pointer): HResult;
    begin
      Result := DISP_E_MEMBERNOTFOUND;
      case DispId of
         4: ShowMessage( 'Document New' );
         5: ShowMessage( 'Document Open' );
         6: ShowMessage( 'Document Close' );
      end;
    end;



    Для подключения использую код

    procedure TForm1.Button1Click(Sender: TObject);
    var
     Doc: DocumentEvents;
     WordSink: TWordSink;
    begin
      Doc := CreateOleObject( 'Word.Document' ) as DocumentEvents;
      WordSink := TWordSink.CreateConnected( Doc );
    end;



    На первой же строчке получаю ошибку Interface not supported

    Подскажите, как подключиться к событиям ворда.

    P.S.
    Не предлагайте использование объектов типа TWordApplication или _Application. Нужно именно через OLE.
 
Конференция "Corba" » Подключение к событиям COM объекта [Delphi, Windows]
Есть новые Нет новых   [118243   +31][b:0][p:0.002]