当打开多个CATIA会话时,GetObject将返回第一个会话。是否可以针对特定会话CATIA会话?我注意到当外部程序通过COM访问CATIA或打开CATIA的内部VBA编辑器时,子进程(CATVBAHostingApplication.exe)启动并保持打开状态。在不终止此过程的情况下,无法从第二个CATIA进程访问VBA编辑器。任何人都可以解释CATVBAHostingApplication.exe如何与CATIA交互,以及是否可以操纵它来定位特定实例?
答案 0 :(得分:0)
您可以定位CATIA的特定实例,但您必须使用程序ID号和一些聪明的编码。你用的是什么语言?你从哪个项目工作?你是独立的EXE还是控制台应用程序?
坦率地说,我编写了通过正在运行的应用程序列表解析并获取此信息的子程序,但这很痛苦。就像访问多个Excel实例一样,您可以使用打开的文件名(如Excel中的工作簿)通过GetObject进行访问。但首先你需要进行我之前提到的解析。
一种更简单的方法:每当我需要同时打开多个Catia实例时,我使用CreateObject而不是GetObject,并让我的外部程序启动所有实例。
CATVBAHostingApplication.exe是一个[坦率的草率]解决方案,用于在64位版本的CATIA中维护VBA。 32位CATIA中的VBA曾经是一件好事。超快,没有刷新所有的fing时间等等。一旦64位出现,Dassault不知道如何处理VBA附件。因此,他们使这个CATVBAHostingApplication.exe与CATIA一起运行,并且它很慢,不必要地刷新CATIA显示,并且有很多错误。即使你杀了CATIA,你的CATVBAHostingApplication.exe仍然运行并不罕见,当你重新打开时,旧的会话仍然保留着你的CATVBA文件。我可能每天至少三次从任务管理器中杀死CATVBAHostingApplication.exe。
无论何时启动某种API,无论是通过ALT + F8还是ALT + F11在CATIA内部,或者如果通过COM连接,如果您喜欢或不喜欢,都会启动此过程。没有解决方法。我以编程方式使用上面提到的类似方法解析任务列表,以编程方式使用TaskKill来停止CATVBAHostingApplication.exe,如果这是必要的事情。但是在大多数情况下,如果我通过COM进行连接,那么如果客户端在下次重新启动Windows时运行,那么对客户端来说并不重要。他们通常不会在VBA中编程,只需使用我的插件和手动建模。
最后,我不确定您为什么要连接到CATVBAHostingApplication.exe(从我在帖子中看到的内容),并且您不应该直接连接到CATIA?如果您已加载CATIA的参考,那么您是否需要连接到VBA编辑器?也许我是误会。 HTH