COM 组件 提供了一个回调接口 ICallBack
这个COM组件提供了一个方法让COM客户端程序可以把回调接口指针传递进去:
   function Advise(const pCallBack: ICallBack; out pdwCookie: Integer): HResult; stdcall;
其中第一个参数就是要传递一个ICallBack指针进去.
我从这个接口派生了一个类 TSink.然后我这样:
var
  Form1: TForm1;
  pEvent : IEvent1;
  mSink : TSink;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
 var  cookie : Integer;
      hr : HResult;
begin
   pEvent := CreateComObject(CLASS_Event1) as IEvent1;   cookie := 2;   hr := pEvent.Advise(mSink , cookie);
   if hr = E_INVALIDARG then
   begin
   ShowMessage(IntToStr(cookie));
    end;
   pEvent.Add(1, 1);
end;在实际运行中
Advise方法返回E_INVALIDAGR.我看了这个COM组件的代码,在Advise方法里,首先就判断参数pCallBack是否为空,如果是空就返回E_INVALIDAGR.现在返回的是E_INVALIDARG,说明我的参数传递不对,到底应该怎么传递啊 

解决方案 »

  1.   

    我另外还有两个新帐号上有400分,只要能解决,分数不是问题下面是COM库生成的PAS文件一部分// *********************************************************************//
    // Interface: IEvent1
    // Flags:     (0)
    // GUID:      {7E659BB0-FB79-4188-9661-65CA22B6A3E6}
    // *********************************************************************//
      IEvent1 = interface(IUnknown)
        ['{7E659BB0-FB79-4188-9661-65CA22B6A3E6}']
        function Add(n1: Integer; n2: Integer): HResult; stdcall;
        function Advise(const pCallBack: ICallBack; out pdwCookie: Integer): HResult; stdcall;
        function Unadvise(dwCookie: Integer): HResult; stdcall;
      end;