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

如何解决迟绑定(Late Binding)中激活Main Body的报错问题?

CATIA迟绑定激活Main Body报错的解决方法

早绑定模式下激活Main Body的代码可正常运行:

Dim partDocument1 As PartDocument        
partDocument1 = CATIA.ActiveDocument
Dim part1 As Part
part1 = partDocument1.Part
Dim bodies1 As Bodies = part1.Bodies
Dim body1 As Body = bodies1.Item("Main Body")
part1.InWorkObject = body1

但迟绑定模式下执行类似代码时,会返回错误:Exception de HRESULT : 0x80020003 (DISP_E_MEMBERNOTFOUND),迟绑定代码如下:

Dim partDocument1 As Object        
partDocument1 = CATIA.ActiveDocument
Dim part1 As Object
part1 = partDocument1.Part
Dim bodies1 As Object
bodies1  = part1.Bodies
Dim body1 As Object 
body1  = bodies1.Item("Main Body")
part1.InWorkObject = body1

解决方法

针对迟绑定的报错问题,可尝试以下几种方案:

  • 修正VBA环境的对象赋值语法:
    如果是在VBA中使用迟绑定,对象变量赋值必须添加Set关键字,否则会触发成员找不到的错误。修改后的代码如下:

    Dim partDocument1 As Object        
    Set partDocument1 = CATIA.ActiveDocument
    Dim part1 As Object
    Set part1 = partDocument1.Part
    Dim bodies1 As Object
    Set bodies1  = part1.Bodies
    Dim body1 As Object 
    Set body1  = bodies1.Item("Main Body")
    Set part1.InWorkObject = body1
    
  • 用SetInWorkObject方法替代属性直接赋值:
    部分CATIA COM对象的属性在迟绑定时直接赋值会失效,可改用官方提供的SetInWorkObject方法设置工作对象:

    Dim partDocument1 As Object        
    partDocument1 = CATIA.ActiveDocument
    Dim part1 As Object
    part1 = partDocument1.Part
    Dim bodies1 As Object
    bodies1  = part1.Bodies
    Dim body1 As Object 
    body1  = bodies1.Item("Main Body")
    ' 替换属性赋值为方法调用
    part1.SetInWorkObject(body1)
    
  • 通过反射显式调用COM成员(.NET环境):
    若在VB.NET等.NET环境中使用迟绑定,可通过反射的InvokeMember方法显式访问属性和方法,确保正确解析COM成员:

    Imports System.Reflection
    
    Dim partDocument1 As Object = CATIA.ActiveDocument
    Dim part1 As Object = partDocument1.GetType().InvokeMember("Part", BindingFlags.GetProperty, Nothing, partDocument1, Nothing)
    Dim bodies1 As Object = part1.GetType().InvokeMember("Bodies", BindingFlags.GetProperty, Nothing, part1, Nothing)
    Dim body1 As Object = bodies1.GetType().InvokeMember("Item", BindingFlags.InvokeMethod, Nothing, bodies1, New Object() {"Main Body"})
    ' 显式设置InWorkObject属性
    part1.GetType().InvokeMember("InWorkObject", BindingFlags.SetProperty, Nothing, part1, New Object() {body1})
    

内容的提问来源于stack exchange,提问作者El doctor Sertato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:57:24