在本文中,我将讨论从COM兼容编程语言(例如C#,VB.NET,C++,Visual Basic 6)连接到SOLIDWORKS实例的2种通用方法,以便使用SOLIDWORKS API。
这是这些可选方法的详细说明。请点击以下链接访问演示如何创建示例项目并连接到 SOLIDWORKS 实例的文章:
方法 A - Activator 和 ProgId
通过程序标识 (Program Identified,progid) 或全局唯一 COM 类标识符 (Global Unique COM Class Identifier,CLSID) 创建实例进行连接。
SOLIDWORKS 有两种类型的程序标识符:版本独立和版本特定。
程序标识符在 Windows 注册表中注册:
Windows注册表中的类ID
在上面的示例中,SldWorks.Application.23 的程序标识符对应于 COM 类标识符。
有关此对象的更多信息(如类型库类标识符、COM 服务器位置 [即 sldworks.exe] 的路径)可以在与类标识符相关的注册表分支中找到(即 HKEY_CLASSES_ROOT\CLSID{D66FBAAE-4150-402F-8581-75D1652D696A})
Windows 注册表中的程序 ID
对于所有版本的 SOLIDWORKS,与版本无关的程序标识符将相同,并且等于“SldWorks.Application”。
如果您使用与版本无关的标识符,这将确保您的代码对安装了 SOLIDWORKS 的任何环境都有效。但是,在安装多个版本的 SOLIDWORKS 时,这将引入歧义。在这种情况下,您的程序将连接到计算机中上次安装或修改的版本。
要使用特定于版本的程序标识符,需要在程序标识符后指定修订号,即“SldWorks.Application.RevisionNumber”。有关 SOLIDWORKS 版本(Version)及其修订号(Revision)的列表,请参阅下表:
版本及其修订号列表
可以通过 ISldWorks::RevisionNumber 方法获取 SOLIDWORKS 会话(运行中的程序)的修订号。返回值是格式为 25.1.0 的字符串,其中第一个数字是修订号。
使用此方法时需要注意的一些限制:
Excel 中的 SOLIDWORKS 零件文档 OLE 对象
方法 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 对象运行对象表的示例:
!{00024505-0014-0000-C000-000000000046}
!Microsoft Visual Studio Telemetry:11004
!{31F45B04-7198-45ED-A13F-F224A4A1686A}
SolidWorks_PID_15212
!VisualStudio.DTE.14.0:16144
如果 SOLIDWORKS 应用程序和独立应用程序以不同的权限级别运行(例如,一个以管理员身份运行,而另一个则不是),则可能无法从 ROT 中成功检索对象。在同一用户下运行它们以启用通信。
请点击文章开头的链接获取详细指南,其中包含连接到 SOLIDWORKS 实例的代码示例。
文章翻译自https://www.codestack.net/
仅供学习使用。