使用COM Interop从VBA调用C#方法

通过引用this,我能够将Entities.tlb文件附加到VBA。但是我无法从C#中的类创建实例。这是我的代码,

C#类

namespace Entities
{
    [Guid("1558C766-44DA-4DA5-BF2F-CBD6804E7E21")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [ComVisible(true)]
    public interface ITools
    {
        ABC GetaBC();

    }

    [Guid("514719AC-E137-4FCA-82AF-73E4025A8625")]
    [ClassInterface(ClassInterfaceType.None)]
    [ComVisible(true)]
    public class Tools : ITools
    {
        public Tools()
        {

        }

        public methods ...
    }
}

从VBA,

Dim objElement As New Entities.Tools

这导致错误:无效使用新关键字

在VBA对象浏览器中,对于附加的Entities.tlb,它还会显示Entities命名空间下的所有类。但这并未在这些类中显示任何方法。

如何在VBA中创建Tools类的实例并从VBA中访问Tools类中的方法?

zqw350426 回答:使用COM Interop从VBA调用C#方法

删除构造函数。 VBA无法使用它们,而c#将透明地实现默认构造函数。

然后尝试上课

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(ITools))]

并在界面

只是

[ComVisible(true)]

然后在VBA中

Dim objElement as Tools
set objElement = new Tools

我有一个从VBA访问的C#类,这是我发现的唯一一种在VBA中提供智能感知并仍然允许诸如GetEnumerator之类的项目正常工作的方法。

Kvp C# dictionary wrapper for VBA

您还应该注意,如果您的类中有索引器,则.Item [x]语法仅在选择不具有智能感知时才适用。如果您具有智能感知能力,则使用.Item [x] = value将由于在为索引器构造中间语言方面存在错误而产生VBA错误。

本文链接:https://www.f2er.com/2427578.html

大家都在问