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,说明我的参数传递不对,到底应该怎么传递啊
这个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,说明我的参数传递不对,到底应该怎么传递啊
// 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;