【问题标题】:Is it possible to target specific COM Instances of CATIA?是否可以针对 CATIA 的特定 COM 实例?
【发布时间】:2014-11-15 02:41:39
【问题描述】:

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

【问题讨论】:

    标签: catia


    【解决方案1】:

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

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

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

    CATVBAHostingApplication.exe 是在 64 位版本的 CATIA 中维护 VBA 的 [坦率地说是草率的] 解决方案。 32 位 CATIA 中的 VBA 曾经是一件很棒的事情。超级快,没有刷新所有的时间,等等。一旦 64 位出现,达索不知道如何处理 VBA 附件。所以他们让这个 CATVBAHostingApplication.exe 与 CATIA 一起运行,它很慢,不必要地刷新 CATIA 显示,并且有很多错误。即使您杀死了 CATIA,您的 CATVBAHostingApplication.exe 仍然运行并不少见,当您重新打开时,旧会话仍然保留您的 CATVBA 文件。我可能每天至少 3 次从任务管理器中杀死 CATVBAHostingApplication.exe。

    每当您启动某种 API 时,无论是通过 ALT+F8 或 ALT+F11 在 CATIA 内部,还是通过 COM 连接,无论您喜欢与否,都会启动此过程。没有解决方法。我已经以编程方式使用了我上面提到的类似方法来解析任务列表,以便以编程方式使用 TaskKill 来停止 CATVBAHostingApplication.exe(如果这是必要的)。但在大多数情况下,如果我通过 COM 进行连接,那么客户端在下次重新启动 Windows 之前是否正在运行并不重要。无论如何,他们通常不会使用 VBA 编程,只是使用我的插件和手动建模。

    最后,我不确定您为什么要连接到 CATVBAHostingApplication.exe(根据我在您的帖子中读到的内容),您不应该直接连接到 CATIA 吗?如果您已经为 CATIA 加载了引用,那么您不需要连接到 VBA 编辑器吗?也许我是误会了。高温

    【讨论】:

    • 嗨 Nickolas - 我正在运行 V5R23 并使用 VB.NET。我正在编写的程序是一个独立的 EXE 应用程序。我宁愿不使用 CreateObject... 基本上我需要比较来自同时打开的两个单独的 CATIA 会话的模型数据。我没有直接连接到 CATVBA...我只是注意到与启动 VBA 编辑器的 CATIA 会话的关联是向 COM 公开的会话。抱歉,我没有说清楚。当您谈论程序ID号时,您是在谈论进程ID吗?
    • 嗯。我可以使用 GetObject("FullPath.CATProduct") 获取对象,但似乎无法将其转换为 INFITF.Application 或 ProductDocument。有什么建议吗?非常感谢您迄今为止的帮助。
    • 你能发布你的代码吗?当我使用 .net 时,我通常使用 C# 进行编码,因此我可能需要一个 vb.net 人员来帮助进行转换。
    • Dim CATObj As Object = GetObject("C:\Users\XXXXX.CATProduct") Dim CATIA As INFITF.Application = CType(CATObj, INFITF.Application) 我得到一个“不支持这样的接口”错误。转换为 ProductDocument、Document 和 CATObj.Application 给出了相同的结果。如果您更容易发布 C# sn-p,我可以阅读它。提前致谢。
    • 我到处找,似乎找不到检索多个实例的代码。我记得,这太痛苦了,我最终使用 createObject 来管理多个实例,或者使用大多数多实例 CATIA 会话的参数中的宏自定义启动 CNEXT.exe。但是,也许这会对您有所帮助:stackoverflow.com/questions/17658425/…
    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2011-02-03
    相关资源
    最近更新 更多