為SOLIDWORKS創(chuàng)建VB.NET獨(dú)立(exe)應(yīng)用程序
在本教程中,我將演示如何使用 VB.NET 和Microsoft Visual Studio從進(jìn)程外(也稱為獨(dú)立)應(yīng)用程序(例如Windows Forms,Windows Console)連接到SOLIDWORKS應(yīng)用程序。
有關(guān)本文中討論的方法的更詳細(xì)說(shuō)明,請(qǐng)閱讀《如何使用SOLIDWORKS API創(chuàng)建獨(dú)立(exe)應(yīng)用程序》一文。

創(chuàng)建新項(xiàng)目
我將使用Microsoft Visual Studio開(kāi)發(fā)環(huán)境。您可以使用任何版本的 Visual Studio。相同的代碼適用于專業(yè)版、精簡(jiǎn)版或社區(qū)版。
打開(kāi)Visual Studio。?
啟動(dòng)新項(xiàng)目:

選擇項(xiàng)目模板。我建議從控制臺(tái)應(yīng)用程序項(xiàng)目模板開(kāi)始,因?yàn)樗钌俚念A(yù)生成代碼:

添加對(duì) SolidWorks 互操作庫(kù)的引用。
互操作庫(kù)文件位于SOLIDWORKS安裝文件夾\api\redist\SolidWorks.Interop.sldworks.dll(用于面向 Framework 4.0 及更高版本的項(xiàng)目),SOLIDWORKS安裝文件夾\api\redist\CLR2\SolidWorks.Interop.sldworks.dll(用于面向框架 2.0 和 3.5 的項(xiàng)目)。

對(duì)于面向 Framework 4.0 的項(xiàng)目,我建議將“嵌入互操作類型”選項(xiàng)設(shè)置為 false。否則,由于類型轉(zhuǎn)換問(wèn)題,在調(diào)用 SOLIDWORKS API 時(shí),應(yīng)用程序可能會(huì)出現(xiàn)不可預(yù)測(cè)的行為。?

現(xiàn)在我們可以添加代碼以連接到 SOLIDWORKS 實(shí)例。
創(chuàng)建或連接到SOLIDWORKS實(shí)例
連接到 COM 服務(wù)器的最常見(jiàn)和最快速的方法可能是使用CreateObject方法(https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.visualbasic.interaction.createobject)。替代方法是:Activator::CreateInstance(https://learn.microsoft.com/zh-cn/dotnet/api/system.activator.createinstance)和 GetObject(https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.visualbasic.interaction.getobject)。請(qǐng)注意,如果 GetObject 無(wú)法連接到活動(dòng)會(huì)話,它將創(chuàng)建新實(shí)例。
我建議使用 Activator::CreateInstance,因?yàn)檫@允許通過(guò) 2 個(gè)步驟連接到會(huì)話:
由于 SOLIDWORKS 應(yīng)用程序已注冊(cè)為 COM 服務(wù)器,因此我們可以通過(guò) Type::GetTypeFromProgID方法(https://learn.microsoft.com/zh-cn/dotnet/api/system.type.gettypefromprogid)從其程序標(biāo)識(shí)符創(chuàng)建類型。
從類型定義構(gòu)造類型的實(shí)例。
這種方法將在發(fā)生錯(cuò)誤時(shí)提供更好的故障排除選項(xiàng):如果第一步失敗,則意味著 COM 類未注冊(cè)或無(wú)法從注冊(cè)表訪問(wèn);否則,這可能表示存在某些權(quán)限問(wèn)題。請(qǐng)閱讀《如何使用SOLIDWORKS API創(chuàng)建獨(dú)立(exe)應(yīng)用程序》一文,了解此方法的限制說(shuō)明。
或者,您可以使用 Marshal::GetActiveObject方法(https://learn.microsoft.com/zh-cn/dotnet/api/system.runtime.interopservices.marshal.getactiveobject)連接到SOLIDWORKS的活動(dòng)(已啟動(dòng))會(huì)話。與調(diào)用 GetObject 不同,此方法將確保不會(huì)創(chuàng)建新的 SOLIDWORKS 實(shí)例,并且如果沒(méi)有要連接的正在運(yùn)行的 SOLIDWORKS 會(huì)話,則會(huì)引發(fā)異常。
通過(guò) ROT 獲取正在運(yùn)行的實(shí)例
為了連接到已經(jīng)運(yùn)行的特定 SOLIDWORKS 會(huì)話或能夠創(chuàng)建多個(gè)會(huì)話,您可以使用正在運(yùn)行的對(duì)象表 API。請(qǐng)閱讀《如何使用SOLIDWORKS API創(chuàng)建獨(dú)立(exe)應(yīng)用程序》一文,了解有關(guān)此方法的更多詳細(xì)信息。
在上面的示例中,通過(guò)從SOLIDWORKS應(yīng)用程序安裝路徑啟動(dòng)新進(jìn)程來(lái)啟動(dòng)SOLIDWORKS的新會(huì)話。StartSwApp 函數(shù)需要 sldworks.exe的完整路徑作為第一個(gè)參數(shù),可選的timeout(超時(shí),以秒為單位)作為第二個(gè)參數(shù)。超時(shí)將確保在進(jìn)程無(wú)法啟動(dòng)的情況下應(yīng)用程序不會(huì)被鎖定。
您還可以使用異步調(diào)用,以便在SOLIDWORKS啟動(dòng)時(shí)在應(yīng)用程序中顯示一些進(jìn)度指示:
文章翻譯自https://www.codestack.net/
僅供學(xué)習(xí)使用。