2014-11-14 76 views
0

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

回答

0

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

坦率地说,我写了一些通过正在运行的应用程序列表解析并获取这些信息的子程序,但这很痛苦。就像当您访问多个Excel实例时一样,您可以使用打开的文件名(例如Excel中的工作簿)通过GetObject访问。但首先你需要做我之前提到的解析。更简单的方法:每当我需要同时打开Catia的多个实例时,我使用CreateObject而不是GetObject,并让我的外部程序启动所有实例。

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

无论您何时启动某种API,无论是通过ALT + F8还是通过ALT + F11,或者通过COM连接,此过程总是在您喜欢或不喜欢的情况下启动。没有解决方法。我用编程方式使用了上面提到的类似方法来解析任务列表,以编程方式使用TaskKill来停止CATVBAHostingApplication.exe,如果这是必需的话。但大多数情况下,如果我通过COM连接,则直到下一次重新启动Windows时,它才与客户端无关。它们通常不是用VBA编程,只是使用我的插件和手动建模。

最后,我不确定你为什么要连接到CATVBAHostingApplication.exe(从我在你的文章中读到的内容),你不应该直接连接到CATIA吗?如果你已经加载了CATIA的引用,那么你不需要连接到VBA编辑器?也许我是误解。 HTH

+0

嗨尼古拉斯 - 我运行V5R23并使用VB.NET。我正在编写的程序是一个独立的EXE应用程序。我宁愿不使用CreateObject ...基本上我需要从两个同时打开的CATIA会话中比较模型数据。我没有直接连接到CATVBA ...我只注意到与启动VBA编辑器的CATIA会话的关联是暴露给COM的会话。对不起,我没有说清楚。 当您谈论程序ID号时,您是否在谈论进程ID? – Jon 2014-11-14 20:03:10

+0

嗯。我能够使用GetObject(“FullPath.CATProduct”)获得对象,但似乎无法将其转换为INFITF.Application或ProductDocument。有什么建议?非常感谢您的帮助。 – Jon 2014-11-14 21:21:27

+0

你可以发布你的代码吗?当我使用.net时,我通常使用C#编写代码,因此我可能需要一个vb.net人员才能帮忙进行演员。 – 2014-11-16 04:07:50

相关问题