我正在使用pywin32并调用Dispatch函数来创建COM对象,但这意味着每当我调用该函数时,都会创建一个新的应用程序实例(在本例中为PTV Vissim)。相反,是否可以附加到已有的Vissim应用程序?这样可以加快开发速度,因为每次运行测试时我都不必等待应用程序启动。
这是我现有的相关代码:
import win32com.client as com
Vissim = com.Dispatch("Vissim.Vissim.540")
答案 0 :(得分:0)
一般来说,您可以 不 "附加"将现有的Vissim实例作为COM服务器。每个客户端连接最好由独立的Vissim实例备份。
话虽这么说,仍然可以实现你的目标,即 - 使用命令行开关" -automation "启动Vissim.exe,运行Vissim.exe将充当您所需的自动化服务器。
-
什么是引擎盖下?
事实是,在Vissim.exe的启动代码中,CoRegisterClassObject(CLSID,pUnk,dwClsContext,flags和& dwRegister)默认 ,使用flag = 调用REGCLS_SINGLEUSE 强>
REGCLS_SINGLEUSE 只是意味着 在 之后,客户端应用程序已连接到由正在运行的Vissim.exe托管的Vissim类对象, Vissim类对象的类工厂从公共视图中移除(即,不再在OS系统的类表中)。这意味着,新的客户端连接必须启动一个新的Vissim实例才能获得类工厂,因此需要创建一个新的Vissim实例。
但是,如果您使用命令行开关" -automation "在启动Vissim.exe实例时,Vissim.exe将使用 REGCLS_MULTIPLEUSE 标志来注册类工厂。这允许多个客户端连接到同一个运行的Vissim.exe实例。
我对此事及其他相关问题detailed blog有更多here。您可以在blog.wupingxin.net
查看它们答案 1 :(得分:0)
特别是对于PTV Vissim,可以选择使用扩展名-automation启动Vissim(例如:vissim100.exe -automation)。如果您使用扩展名-automation启动PTV Vissim,它会在随后启动的COM脚本的自动化模式下将PTV Vissim作为COM服务器提供。
请参阅PTV Vissim帮助中的“通过命令提示符启动PTV Vissim”一章。