public RtdServerWrapper(object rtdServer, string progId) { // CAREFUL: ProgId passed in might be token used from regular ClassFactory. _progId = progId; _rtdServer = rtdServer as IRtdServer; if (_rtdServer == null) { // The RtdServer implements another instance of IRtdServer (maybe from some office PIA). // We put together some delegates to call through. Type[] itfs = rtdServer.GetType().GetInterfaces(); foreach (Type itf in itfs) { if (itf.GUID == ComAPI.guidIRtdServer) { InterfaceMapping map = rtdServer.GetType().GetInterfaceMap(itf); for (int i = 0; i < map.InterfaceMethods.Length; i++) { MethodInfo mi = map.InterfaceMethods[i]; switch (mi.Name) { case "ConnectData": _ConnectData = (delConnectData)Delegate.CreateDelegate(typeof(delConnectData), rtdServer, map.TargetMethods[i]); break; case "DisconnectData": _DisconnectData = (delDisconnectData)Delegate.CreateDelegate(typeof(delDisconnectData), rtdServer, map.TargetMethods[i]); break; case "Heartbeat": _Heartbeat = (delHeartbeat)Delegate.CreateDelegate(typeof(delHeartbeat), rtdServer, map.TargetMethods[i]); break; case "RefreshData": _RefreshData = (delRefreshData)Delegate.CreateDelegate(typeof(delRefreshData), rtdServer, map.TargetMethods[i]); break; case "ServerStart": // ServerStart is tricky because of the parameter type mapping. MethodInfo serverStartMethod = map.TargetMethods[i]; _ServerStart = delegate(IRTDUpdateEvent updateEvent) { return((int)serverStartMethod.Invoke(rtdServer, new object[] { updateEvent })); }; break; case "ServerTerminate": _ServerTerminate = (delServerTerminate)Delegate.CreateDelegate(typeof(delServerTerminate), rtdServer, map.TargetMethods[i]); break; } } } } } }
public RtdServerWrapper(object rtdServer, string progId) { // CAREFUL: ProgId passed in might be token used from regular ClassFactory. _progId = progId; _rtdServer = rtdServer as IRtdServer; if (_rtdServer == null) { // The RtdServer implements another instance of IRtdServer (maybe from some office PIA). // We put together some delegates to call through. Type[] itfs = rtdServer.GetType().GetInterfaces(); foreach (Type itf in itfs) { if (itf.GUID == ComAPI.guidIRtdServer) { InterfaceMapping map = rtdServer.GetType().GetInterfaceMap(itf); for (int i = 0; i < map.InterfaceMethods.Length; i++) { MethodInfo mi = map.InterfaceMethods[i]; switch (mi.Name) { case "ConnectData": _ConnectData = (delConnectData)Delegate.CreateDelegate(typeof(delConnectData), rtdServer, map.TargetMethods[i]); break; case "DisconnectData": _DisconnectData = (delDisconnectData)Delegate.CreateDelegate(typeof(delDisconnectData), rtdServer, map.TargetMethods[i]); break; case "Heartbeat": _Heartbeat = (delHeartbeat)Delegate.CreateDelegate(typeof(delHeartbeat), rtdServer, map.TargetMethods[i]); break; case "RefreshData": _RefreshData = (delRefreshData)Delegate.CreateDelegate(typeof(delRefreshData), rtdServer, map.TargetMethods[i]); break; case "ServerStart": // ServerStart is tricky because of the parameter type mapping. MethodInfo serverStartMethod = map.TargetMethods[i]; _ServerStart = delegate(IRTDUpdateEvent updateEvent) { return (int)serverStartMethod.Invoke(rtdServer, new object[] {updateEvent}); }; break; case "ServerTerminate": _ServerTerminate = (delServerTerminate)Delegate.CreateDelegate(typeof(delServerTerminate), rtdServer, map.TargetMethods[i]); break; } } } } } }