首页 > 解决方案 > COM 接口/类返回“对象没有属性或方法”错误

问题描述

我正在尝试开发一个计算引擎并将实现的类公开为本文之后的 COM对象。公开的 DLL(Com 对象)将被第三方应用程序使用。一些由 VB6 实现的旧 DLL 现在可以正常使用和工作。

虽然最终的 DLL 是通过命令提示符中的 RegAsm 命令注册的,但 COM 对象在目标应用程序中变得可见,但我收到错误消息

“创建对象失败”、“对象没有属性或方法”。

到目前为止,除了下面的代码之外,我还尝试了以下内容:

我在这里创建了一个示例代码作为示例,任何进一步的帮助将不胜感激:)

using System;
using System.Runtime.InteropServices;

namespace project_name
{
    [Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
    [ComVisible(true)]
    public interface ComClass1Interface
    {
        [DispId(0)]
        [ComVisible(true)]
        double calc();
    }

    [Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"),
        InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ComClass1Events
    {
    }

    [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
        ClassInterface(ClassInterfaceType.None),
        ComSourceInterfaces(typeof(ComClass1Events))]
    public class ComClass1 : ComClass1Interface
    {
        public double calc()
        {
            return 13;
        }
    }
}

DLL 使用RegAsm命令注册,以便在 COM 对象上列出。 使用 RegASM 注册 DLL

Com 对象对目标应用程序可见。

该对象现在作为 COM 对象可见

在尝试选择实现的方法时,我遇到了这些错误:-/:

在此处输入图像描述

我正在使用 Visual Studio 2019、C#、.NET Framework 4.0,目标应用程序在 Windows Server 2008 R2 上运行,并且安装了 .NET Frameworks 3.5、4.6。

标签: c#.netcomvisual-studio-2019

解决方案


这些操作解决的问题:

  1. 程序集应使用强名称进行签名(我使用了 Visual Studio 签名工具)
  2. COM 对象应注册为regasm path/dll-name.dll /codebase /tlb /nologo

推荐阅读