怎样在COM的事件中返回参数。(200分)

注意function TServerEventDispatch.Invoke 里的代码。

ParamCount := TDispParams(Params).cArgs;
// Set our array to appropriate length
SetLength(VarArray, ParamCount);
// Copy over data
for I := Low(VarArray) to High(VarArray) do
VarArray[High(VarArray)-I] := OleVariant(TDispParams(Params).rgvarg^);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
在这里已经将参数的顺序反转了。

我在北京。
 
hehe
真的。
 
我的一段代码在TLB是这样定义的

ICommunicationEvents = dispinterface
['{D92C963C-5A7B-409C-B387-5A648D9B0F0C}']
procedure OnData(aData: OleVariant; const aSource: WideString; out aAction: Integer); dispid 1;
end;

实现是这样的
procedure TfrmMain.doOnData(aData: TStream; const aSource: String; var aAction: Integer);

不过因为D6的好像有问题, 我用的是EventSinkImp来做的, 能够把事件的结果返回Server
 
to tseug:
EventSinkImp工具我还没有试。
看来只好借助第三方工具来解决,不知是不是delphi的问题。
to going_cc:
看来这个问题一时也无法弄明白。
 
多人接受答案了。
 
顶部