在接口中加入一个TEST属性,定义为INT类型,然后在附加单元里编写属性定义代码
编译后就可作为COM服务器接口的属性调用

解决方案 »

  1.   

    我是想调用传递过来的对象的方法,怎么办呢?
    这么说吧:一个对象(a:Ta).它有个showit的方法。我想在主程序中将a传给COM服务器,然后在COM中调用a.showit方法。如何实现呢?
      

  2.   

    即使它的属性也不是简单的INT,BSTR之类呀.那如何办呢?比如我想传递一个TDataSet的对象过去.
      

  3.   

    对不起,弄错了。应该用流实现
    先用TMemoryStream保存Component,然后转化为TStringStream,进行传递。
    客户端逆过来执行。
    我试了一下,可以完成。如:
    服务器端建立一个方法:
    function TTestMidasDM.GetComponent: WideString;
    var
      BinStream:TMemoryStream;
      StrStream: TStringStream;
      s: string;
    begin
      BinStream := TMemoryStream.Create;
      try
        StrStream := TStringStream.Create(s);
        try
          BinStream.WriteComponent(aButton);
          BinStream.Seek(0, soFromBeginning);
          ObjectBinaryToText(BinStream, StrStream);
          StrStream.Seek(0, soFromBeginning);
          Result:= StrStream.DataString;
        finally
          StrStream.Free;
        end;
      finally
        BinStream.Free
      end;
    end;
    客户端调用var
      frmMainClient: TfrmMainClient;
      Server: ITestMidasDM;implementation{$R *.DFM}procedure TfrmMainClient.btnServerClick(Sender: TObject);
    var
      StrStream:TStringStream;
      BinStream: TMemoryStream;
      NewButton: TButton;
    begin
      Server := CoTestMidasDM.Create as ITestMidasDM;
      StrStream := TStringStream.Create(Server.GetComponent);
      NewButton := TButton.Create(Self);
      try
        BinStream := TMemoryStream.Create;
        try
          ObjectTextToBinary(StrStream, BinStream);
          BinStream.Seek(0, soFromBeginning);
           //转化为Newbutton
          NewButton := TTable(BinStream.ReadComponent(NewButton));
          ShowMessage(NewButton.caption);
        finally
          BinStream.Free;
        end;
      finally
        StrStream.Free;
      end;
    end;