我有一个通过 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/