如何使用SOLIDWORKS API创建独立(exe)应用程序
在本文中,我将讨论从COM兼容编程语言(例如C#,VB.NET,C++,Visual Basic 6)连接到SOLIDWORKS实例的2种通用方法,以便使用SOLIDWORKS API。
这是这些可选方法的详细说明。请点击以下链接访问演示如何创建示例项目并连接到 SOLIDWORKS 实例的文章:
Using C# (https://www.codestack.net/solidworks-api/getting-started/stand-alone/connect-csharp/)
Using VB.NET(https://www.codestack.net/solidworks-api/getting-started/stand-alone/connect-vbnet/)
Using C++(https://www.codestack.net/solidworks-api/getting-started/stand-alone/connect-cpp/)
方法 A - Activator 和 ProgId
通过程序标识 (Program Identified,progid) 或全局唯一 COM 类标识符 (Global Unique COM Class Identifier,CLSID) 创建实例进行连接。
SOLIDWORKS 有两种类型的程序标识符:版本独立和版本特定。
程序标识符在 Windows 注册表中注册:

在上面的示例中,SldWorks.Application.23 的程序标识符对应于 COM 类标识符。
有关此对象的更多信息(如类型库类标识符、COM 服务器位置 [即 sldworks.exe] 的路径)可以在与类标识符相关的注册表分支中找到(即 HKEY_CLASSES_ROOT\CLSID{D66FBAAE-4150-402F-8581-75D1652D696A})

对于所有版本的 SOLIDWORKS,与版本无关的程序标识符将相同,并且等于“SldWorks.Application”。
如果您使用与版本无关的标识符,这将确保您的代码对安装了 SOLIDWORKS 的任何环境都有效。但是,在安装多个版本的 SOLIDWORKS 时,这将引入歧义。在这种情况下,您的程序将连接到计算机中上次安装或修改的版本。
要使用特定于版本的程序标识符,需要在程序标识符后指定修订号,即“SldWorks.Application.RevisionNumber”。有关 SOLIDWORKS 版本(Version)及其修订号(Revision)的列表,请参阅下表:

可以通过 ISldWorks::RevisionNumber 方法获取 SOLIDWORKS 会话(运行中的程序)的修订号。返回值是格式为 25.1.0 的字符串,其中第一个数字是修订号。
使用此方法时需要注意的一些限制:
此方法是连接到已在运行的 SOLIDWORKS 实例还是将创建新的实例并不总是可预测的。
无法指定要连接到哪个正在运行的 SOLIDWORKS 会话(例如,当多个 SOLIDWORKS 会话打开时)
如果由于运行此方法而创建新会话,则默认情况下,此会话将不可见,并以 /embed 标志启动。这意味着会话是轻量级启动的,并且不会加载任何加载项。这旨在允许将 OLE 对象嵌入到第三方应用程序(如 Microsoft Office)中。

无法创建多个 SOLIDWORKS 的活动会话。
方法 B - 运行对象表(Running Object Table,ROT)
通过从运行对象表 (ROT) 查询 COM 实例进行连接。
当 COM 服务器创建对象实例时,它会为此实例创建一个名字对象,并将其注册到运行对象表 (ROT) 中。ROT允许通过Windows API从正在运行的进程中查找对象(GetRunningObjectTable方法,https://learn.microsoft.com/zh-cn/windows/win32/api/objbase/nf-objbase-getrunningobjecttable?redirectedfrom=MSDN),从而实现与第三方应用程序的进程间通信。
下面是使用多个已注册的 COM 对象运行对象表的示例:
使用此方法,可以从其进程 ID 连接到 SOLIDWORKS 的任何会话。
可以通过 shell 启动新的 SOLIDWORKS 实例或启动流程 API 来创建任意数量的会话。
如果 SOLIDWORKS 应用程序和独立应用程序以不同的权限级别运行(例如,一个以管理员身份运行,而另一个则不是),则可能无法从 ROT 中成功检索对象。在同一用户下运行它们以启用通信。
请点击文章开头的链接获取详细指南,其中包含连接到 SOLIDWORKS 实例的代码示例。
文章翻译自https://www.codestack.net/
仅供学习使用。