2010-04-30 60 views
2

我目前正在使用COM自动化应用程序,并且如果在应用程序运行时原始应用程序已经打开,任何使用我的应用程序的人都有问题。我知道如何确定流程是否开放,但不必担心关闭流程或解决流程等问题,我想尝试使用现有的应用程序,而不是打开新的应用程序。通过Windows进程句柄访问COM对象

这是我常在我的自动化程序启动应用程序:

Designer.Application desApp = new Designer.Application(); 

现在我试图尝试从现有的应用程序中使用手柄:

Designer.Application desApp = (Designer.Application)((System.Diagnostics.Process.GetProcessesByName("Designer.exe")[0]).Handle) 

(我知道这是行不通的,因为.Handle返回一个IntPtr,但我用它作为例子。)

有什么方法可以完成这个?如果我知道句柄/过程,如何返回可用对象?

回答

2

您不能在客户端代码中完成这项工作,它必须在服务器中处理。服务器必须调用CoRegisterClassObject(),传递REGCLS_MULTIPLEUSE,以便允许多个客户端使用单个服务器实例。没有其他机制允许客户端获得指向Application对象的接口指针。

这是非常设计,服务器必须设计和编写,以支持这种用法。它以后不能用螺栓固定。