Ole服务器主窗体如何向所有已链接的客户程序触发事件(200)

  • 主题发起人 主题发起人 simbawu
  • 开始时间 开始时间
S

simbawu

Unregistered / Unconfirmed
GUEST, unregistred user!
用Delphi编写Ole服务器程序,主程序是Exe应用程序如OleServer.exe,其主窗体是FormMain,再通过新建Automation Object创建了Ole对象类如TOleObj,在TOleObj对象的方法中可以向所有已链接的客户程序触发事件,现在的问题是如何在FormMain的方法中向所有已链接的客户程序触发事件。或者换一个问题,如何在FormMain的方法中访问所有已激活的TOleObj.AutoFactory属性。
 
在TOleObj对象的方法中可以向所有已链接的客户程序触发事件OnBtnClick的源代码如下://枚举所有连接到服务器的活动链接function TOleObj.GetEnumerator: IEnumConnections;var Container: IConnectionPointContainer; ConnectionPoint: IConnectionPoint;begin OleCheck(QueryInterface(IConnectionPointContainer, Container)); OleCheck(Container.FindConnectionPoint(AutoFactory.EventIID, ConnectionPoint)); ConnectionPoint.EnumConnections(Result);end;//向所有客户程序发送事件procedure TOleObj.FireOnBtnClick(const Memo: WideString);var Enum: IEnumConnections; ConnectData: TConnectData; Fetched: Cardinal;begin Enum := GetEnumerator; if Enum <> nil then begin while Enum.Next(1, ConnectData, @Fetched) = S_OK do begin if ConnectData.pUnk <> nil then begin (ConnectData.pUnk as IOleObjEvents).OnBtnClick(Memo); end; end; end;end;问题就是上面两个方法如果搬到TFormMain中的话AutoFactory(TOleObj的属性)无法访问,郁闷。。。
 
后退
顶部