You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于COM的SolidWorks API中makepy实现及调用报错排查

解决SolidWorks API强类型调用的InvokeTypes错误

问题原因

直接实例化makepy生成的solidtypes.ISldWorks接口类(如sw_app = solidtypes.ISldWorks())是错误操作——这类接口类需要绑定到实际的SolidWorks COM实例才能正常工作,直接实例化会导致接口未关联有效COM对象,触发AttributeError: <unknown>.InvokeTypes。

正确实现步骤

1. 获取SolidWorks COM实例并绑定强类型接口

不要直接实例化接口类,先用win32com.client获取SolidWorks的COM实例,再转换为强类型接口以获得IntelliSense支持:

import win32com.client
import solidtypes

# 获取SolidWorks COM实例(自动启动或连接已运行的实例)
sw_app_raw = win32com.client.gencache.EnsureDispatch("SldWorks.Application")
# 转换为强类型接口
sw_app = solidtypes.ISldWorks(sw_app_raw)
# 可选:显示SolidWorks窗口
sw_app.Visible = True

2. 严格匹配API参数类型

强类型调用对参数类型要求更严格,必须使用makepy生成的枚举常量,参数顺序和类型要完全匹配SolidWorks API文档:

示例:调用OpenDoc6打开零件

from solidtypes import swDocumentTypes_e, swOpenDocOptions_e

# 零件路径(用原始字符串避免转义问题)
part_path = r"C:\Your\Part\Path\example.sldprt"

# 调用OpenDoc6,参数严格对应API定义
sw_model = sw_app.OpenDoc6(
    FileName=part_path,
    DocumentType=swDocumentTypes_e.swDocPART,
    Options=swOpenDocOptions_e.swOpenDocOptions_Silent,
    Configuration="",
    Errors=0,
    Warnings=0
)

示例:调用NewPart创建新零件

# 直接调用强类型方法,无需手动转换VARIANT
sw_new_part = sw_app.NewPart()

3. 参数排查小技巧

  • 所有枚举值必须使用solidtypes中定义的枚举类(如swDocumentTypes_e),禁止直接传整数;
  • 字符串参数(如路径、配置名)用原始字符串r""避免转义错误;
  • 输出参数(如Errors、Warnings)若无需接收具体值,传0即可(强类型下会自动处理为VARIANT引用)。

内容的提问来源于stack exchange,提问作者Sean Yeatts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:39:56