Com 附加到进程而不是分派

Com 附加到进程而不是分派,com,pywin32,Com,Pywin32,我正在使用pywin32并调用Dispatch函数来创建COM对象,但这意味着每当我调用该函数时,都会创建一个新的应用程序实例(在本例中为PTV Vissim)。是否可以连接到现有的Vissim应用程序?这将加快开发速度,因为我不必每次运行测试时都等待应用程序启动 这是我现有的相关代码: import win32com.client as com Vissim = com.Dispatch("Vissim.Vissim.540") 通常,您可以不将现有Vissim实例作为COM服务器“附加”。

我正在使用pywin32并调用Dispatch函数来创建COM对象,但这意味着每当我调用该函数时,都会创建一个新的应用程序实例(在本例中为PTV Vissim)。是否可以连接到现有的Vissim应用程序?这将加快开发速度,因为我不必每次运行测试时都等待应用程序启动

这是我现有的相关代码:

import win32com.client as com
Vissim = com.Dispatch("Vissim.Vissim.540")

通常,您可以将现有Vissim实例作为COM服务器“附加”。每个客户端连接最多只能由一个独立的Vissim实例进行备份

尽管如此,仍然可以实现您的目标,即-使用命令行开关“-automation”启动Vissim.exe,并且运行Vissim.exe将根据您的需要充当自动化服务器

--

引擎盖下面是什么

事实是,在Vissim.exe的启动代码中,CoRegisterClassObject(CLSID、pUnk、dwClsContext、flags和dwRegister)在默认情况下是用flag=REGCLS\u SINGLEUSE调用的

REGCLS\u SINGLEUSE简单地说,在客户机应用程序连接到运行的Vissim.exe托管的Vissim类对象后,Vissim类对象的类工厂将从公共视图中删除(即不再在操作系统的类表中)。这意味着,新的客户端连接必须启动一个新的Vissim实例才能获得类工厂,因此创建一个新的Vissim实例是正确的

但是,如果在启动Vissim.exe实例时使用命令行开关“-automation,则Vissim.exe将使用REGCLS\u MULTIPLEUSE标志来注册类工厂。允许多个客户端连接到同一个正在运行的Vissim.exe实例


我对这件事和其他相关问题有更多的了解。您可能想在

上查看它们。一般来说,您可以不将
作为COM服务器“附加”到现有的Vissim实例。每个客户端连接最多只能由一个独立的Vissim实例进行备份

尽管如此,仍然可以实现您的目标,即-使用命令行开关“-automation”启动Vissim.exe,并且运行Vissim.exe将根据您的需要充当自动化服务器

--

引擎盖下面是什么

事实是,在Vissim.exe的启动代码中,CoRegisterClassObject(CLSID、pUnk、dwClsContext、flags和dwRegister)在默认情况下是用flag=REGCLS\u SINGLEUSE调用的

REGCLS\u SINGLEUSE简单地说,在客户机应用程序连接到运行的Vissim.exe托管的Vissim类对象后,Vissim类对象的类工厂将从公共视图中删除(即不再在操作系统的类表中)。这意味着,新的客户端连接必须启动一个新的Vissim实例才能获得类工厂,因此创建一个新的Vissim实例是正确的

但是,如果在启动Vissim.exe实例时使用命令行开关“-automation,则Vissim.exe将使用REGCLS\u MULTIPLEUSE标志来注册类工厂。允许多个客户端连接到同一个正在运行的Vissim.exe实例


我对这件事和其他相关问题有更多的了解。您可能想在

上查看它们,特别是对于PTV Vissim,有一个选项可以使用extension-automation(例如:vissim100.exe-automation)启动Vissim。如果您使用扩展名-automation启动PTV Vissim,它将在自动模式下为随后启动的COM脚本提供PTV Vissim作为COM服务器


请参阅PTV Vissim帮助中的“通过命令提示符启动PTV Vissim”一章。

特别是对于PTV Vissim,有一个使用扩展名-automation(例如:vissim100.exe-automation)启动Vissim的选项。如果您使用扩展名-automation启动PTV Vissim,它将在自动模式下为随后启动的COM脚本提供PTV Vissim作为COM服务器


请参阅PTV Vissim帮助中的“通过命令提示符启动PTV Vissim”一章。

可以使用
win32com.client.GetObject
,但这取决于应用程序。它必须支持它。例如,使用Excel:可以使用
win32com.client.GetObject
,但这取决于应用程序。它必须支持它。例如,使用Excel: