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

.NET (Core)连接CATIA V5/V6 COM组件异常求助

.NET 连接远程CATIA COM组件时获取对象后无法操作的问题

问题背景

我正尝试从.NET Framework迁移至.NET,但新版.NET中没有.NET Framework里的GetObject/GetActiveObject方法,因此自行实现了Marshal2类。目前能成功获取CATIA.APPLICATION对象,但无法对其进行操作或读取属性,例如执行读取Caption属性的代码时会返回通用错误HRESULT E_FAIL。

需要说明的是,CATIA安装在远程机器上,我无权在该机器上安装Visual Studio,因此必须使用GetObject的等效方法。

问题复现代码

Dim CATIA = Marshal2.GetActiveObject("CATIA.APPLICATION")
Dim caption as string = CATIA.Caption ' 此处返回通用错误`HRESULT E_FAIL`

自定义Marshal2类代码

Imports System.Runtime.InteropServices
Imports System.Security

Private Class Marshal2
    Friend Const OLEAUT32 As String = "oleaut32.dll"
    Friend Const OLE32 As String = "ole32.dll"

    <SecurityCritical>
    Public Shared Function GetActiveObject(ByVal progID As String) As Object
        Dim obj As Object = Nothing
        Dim clsid As Guid

        ' 先调用CLSIDFromProgIDEx,如果不存在则回退到CLSIDFromProgID
        Try
            CLSIDFromProgIDEx(progID, clsid)
        Catch ex As Exception
            CLSIDFromProgID(progID, clsid)
        End Try

        GetActiveObject(clsid, IntPtr.Zero, obj)
        Return obj
    End Function

    <DllImport(OLE32, PreserveSig:=False)>
    <ResourceExposure(ResourceScope.None)>
    <SuppressUnmanagedCodeSecurity>
    <SecurityCritical>
    Private Shared Sub CLSIDFromProgIDEx(<MarshalAs(UnmanagedType.LPWStr)> ByVal progId As String, ByRef clsid As Guid)
    End Sub

    <DllImport(OLE32, PreserveSig:=False)>
    <ResourceExposure(ResourceScope.None)>
    <SuppressUnmanagedCodeSecurity>
    <SecurityCritical>
    Private Shared Sub CLSIDFromProgID(<MarshalAs(UnmanagedType.LPWStr)> ByVal progId As String, ByRef clsid As Guid)
    End Sub

    <DllImport(OLEAUT32, PreserveSig:=False)>
    <ResourceExposure(ResourceScope.None)>
    <SuppressUnmanagedCodeSecurity>
    <SecurityCritical>
    Private Shared Sub GetActiveObject(ByRef rclsid As Guid, ByVal reserved As IntPtr, <MarshalAs(UnmanagedType.Interface)> ByRef ppunk As Object)
    End Sub
End Class

内容的提问来源于stack exchange,提问作者N.TW12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:46:18