0

当打开多个 CATIA 会话时,GetObject 返回第一个会话。是否可以针对特定会话 CATIA 会话?我注意到,当外部程序通过 COM 访问 CATIA 或打开 CATIA 的内部 VBA 编辑器时,子进程 (CATVBAHostingApplication.exe) 会启动并保持打开状态。如果不终止此进程,则无法从第二个 CATIA 进程访问 VBA 编辑器。谁能解释 CATVBAHostingApplication.exe 如何与 CATIA 交互以及是否可以对其进行操作以针对特定实例?

4

1 回答 1

0

您可以针对特定的 CATIA 实例,但必须使用程序 ID 号和一些巧妙的编码。您使用什么语言?你从哪个程序工作?您是在制作独立的 EXE 或控制台应用程序吗?

坦率地说,我已经编写了通过正在运行的应用程序列表解析并获取这些信息的子程序,但这很痛苦。就像访问多个 Excel 实例时一样,您使用打开的文件名(如 Excel 中的工作簿)通过 GetObject 进行访问。但首先你需要做我之前提到的解析。

一个更简单的方法:每当我需要同时打开多个 Catia 实例时,我使用 CreateObject 而不是 GetObject,并让我的外部程序启动我的所有实例。

CATVBAHostingApplication.exe 是在 64 位版本的 CATIA 中维护 VBA 的 [坦率地说是草率的] 解决方案。32 位 CATIA 中的 VBA 曾经是一件很棒的事情。超级快,没有刷新所有的时间,等等。一旦 64 位出现,达索不知道如何处理 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 编辑器吗?也许我是误会了。高温高压

于 2014-11-14T18:41:39.340 回答