2014-11-14 20 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

相關問題