首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用COM Interop从VBA中调用C#方法

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

Stack Overflow用户
提问于 2020-04-16 22:30:13
回答 1查看 36关注 0票数 0

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

C#类

代码语言:javascript
运行
复制
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中,

代码语言:javascript
运行
复制
Dim objElement As New Entities.Tools

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2020-04-16 22:45:09

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

然后在班级里试试

代码语言:javascript
运行
复制
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(ITools))]

在界面中

只是

代码语言:javascript
运行
复制
[ComVisible(true)]

然后在VBA中

代码语言:javascript
运行
复制
Dim objElement as Tools
set objElement = new Tools

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

Kvp C# dictionary wrapper for VBA

您还应该知道,如果您的类中有索引器,那么只有在您选择不使用智能感知的情况下,.Itemx语法才会起作用。如果你有.Itemx=value,那么使用intellisense将会产生一个VBA错误,这是由于为索引器构造中间语言的一个bug。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61252780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档