【发布时间】:2019-03-23 06:05:14
【问题描述】:
我尝试使用可在 Visual Basic (Excel) 中运行的 .net 框架创建 C# 库 (.dll)。我在 Visual Studio 上开发。
经过一番研究,我发现我们可以使用 COM 接口在 DLL 和 VBA 之间进行通信。 我指的是Calling a .net library method from vba
我无法检查 Visual Studio 中的“注册 COM 互操作”构建选项。此选项已禁用。 option_disable
然后,当我使用“InterfaceType(ComInterfaceType.InterfaceIsDual)”时,Visual Studio 告诉我该参数已弃用。 argument obsolete
最后,我无法从 VBA 代码中调用我的“HelloWorld”函数。
精度:
我的 C#/.net 程序构建成功
-
我用这个命令注册了我的 DLL(注册没有错误)
regasm /s /codebase /tlb ClassLibrary3.dll
我的完整 C#/.net 程序:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace ClassLibrary3
{
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface _Test
{
string HelloWorld();
}
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class Test : _Test
{
public string HelloWorld() {
return "Hello, World! ";
}
}
}
除了 COM 之外,我还可以使用其他选项吗?
或者我的程序有什么问题?
谢谢你的帮助:)
巴斯蒂安
【问题讨论】:
-
从这些符号中您似乎正在创建一个Universal Windows 类库?如果是这样,没有办法让它们 COM 可见似乎是合理的,为什么不使用 vanilla 类库?
-
是的,尝试创建一个普通的类库项目,然后用 COM 属性装饰它。 COM 插件仍然适用于创建基于 Excel 的应用程序。