.net - 是否可以向 COM 互操作调用者公开 C# 枚举,如果可以,如何?

标签 .net enums com interop oleview

我有一个通过 COM 互操作调用的托管程序集。像 VBScript 客户端、Perl 客户端等等。

类(class)装饰着

[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]

然后我当然会做 regasm 的事情,所有的方法都工作得很好。

但是程序集中也有枚举类型。我想对枚举值使用符号名称 COM 应用程序。

如何通过 COM 互操作公开枚举?我只需要添加这些属性吗?
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]

然后,如何在 VBScript 中引用这些符号名称?我在 OleView 中看不到枚举类型。 (我应该吗?)我在 OleView 中看到了所有其他类型。

最佳答案

我使 COM 可见的(到目前为止).NET 程序集也有一个枚举类型,它在 OleView 中显示得很好。我让整个库对 COM 可见,所以

[ComVisible(true)]

没有必要。你的枚举类型是公开的吗?

发生的一件事是不同的枚举以“枚举类型名称”_为“前缀”:
public enum DataType
{
    INT32,
    FLOAT64,
    INT8
}

转换成:
typedef [...]
enum {
    DataType_INT32 = 0,
    DataType_FLOAT64 = 1,
    DataType_INT8 = 2
} DataType;

在类型库中。

关于.net - 是否可以向 COM 互操作调用者公开 C# 枚举,如果可以,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1276442/

相关文章:

com - CLSID自动生成的默认规则是什么?

com - 通过 COM/SxS 在 Unity3d 中使用 .NET 4.0 DLL?

.net - 在 .NET C# 中将 RSA 算法的字节数组签名转换为字符串并再次返回字节数组

c# - 随机存取存储器中的索引数据库

c++ - 解决枚举歧义名称冲突的建议?

c# - UWP - 绑定(bind)枚举差异

c# - 如何使用 MOQ 库模拟一个 ENum

c# - 接口(interface)不能被实例化,但这是一个异常吗

.net IPC 不使用端口

c# - 如何捕获 .NET 的 MVC 中的过滤器抛出的异常?