我一直致力于使用 python 在 Solidworks 中编写一些重复行为的脚本。我花了一段时间尝试浏览 win32com 库并设法完成了很多工作,但遇到了障碍。所以我现在正试图通过 Iron Python 控制 API。只是试图滚动并遇到问题。我试图运行下面的代码:
import clr
clr.AddReferenceToFileAndPath('..\\Redist\\SolidWorks.Interop.sldworks.dll')
clr.AddReference('SolidWorks.Interop.swconst')
from SolidWorks.Interop import sldworks
from SolidWorks.Interop import swconst
print sldworks
swApp = sldworks.ISldWorks()
swApp.Visible = True
在运行此代码时,我得到“TypeError:无法创建 ISldWorks 的实例,因为它是抽象的”
在查看此处的 Solidworks 文档时, 我看到以下信息:“此接口是 SolidWorks API 中的最高级别对象。此接口提供了一组通用函数,允许应用程序级别的操作,例如创建、打开、关闭和退出文档、排列图标和窗口、更改活动文档以及创建属性定义。
使用 CreateObject、GetObject、New 或类似函数从 Dispatch 应用程序(Visual Basic 或 C++ Dispatch)获取 ISldWorks 对象。独立的 .exe C++ COM 应用程序可以使用 CoCreateInstance。所有 SolidWorks API 插件向导都会自动为您创建 ISldWorks 对象。
事件是通过 Microsoft .NET Framework 中的委托实现的。有关此接口的委托列表,请参阅概述主题。”
现在,虽然我对 python 编程非常熟悉,但整个 .net 对我来说是一种新事物,所以我确信我做错了一些简单的事情,但我确实很难弄清楚那是什么。谢谢你的帮助。
--UPDATE 所以我已经通过并研究了.net 系统是如何工作的,我觉得我对它有更好的处理。因此,如果我理解正确,我的目标是尝试创建 Solidworks 应用程序对象或 ISldWorks 的实例,然后我应该能够访问所有成员。在我的研究中,我遇到了这两篇文章:Solidworks 独立应用程序和其中的 Iron python 文档,以及您非常有帮助的回复,看来下面的代码应该可以工作。虽然在运行时,我收到一条错误消息“EnvironmentError: System.Runtime.InteropServices.COMException (0x8002802B): Element not found. (Exception from HRESULT: 0x8002802B (TYPE_E_ELEMENTNOTFOUND))”这让我相信该对象仍然是没有正确实例化。
import System
t = System.Type.GetTypeFromProgID('SldWorks.Application')
swApp = System.Activator.CreateInstance(t)
swApp.Visible = True