static void Main(string[] args) { // convert Library1.Server to Library2.Interface var server = ComWrapper.Create <Library2.Interface>(() => new Library1.Server()); var client = new Library2.Client(); client.CallMethod(server); Marshal.ReleaseComObject(server); Console.ReadLine(); }
public static T Create <T>(Func <object> createInnerObject) { var wrapper = new ComWrapper(); var unk = wrapper.Initialize(createInnerObject); Marshal.AddRef(unk); try { var comObject = Marshal.GetObjectForIUnknown(unk); return((T)comObject); } finally { Marshal.Release(unk); } }