Che*_*eso 13 .net com enums interop oleview
我有一个通过COM Interop调用的托管程序集.像VBScript客户端,Perl客户端等.
课程装饰有
[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)
然后当然我做了regasm的事情,所有方法都运行得很好.
但是程序集中也有枚举类型.我想使用符号名称COM应用程序,用于枚举值.
如何通过COM互操作公开枚举?我只需要添加这些属性吗?
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)
然后,我如何在VBScript中引用这些符号名称?我没有看到OleView中的枚举类型.(我应该?)我在OleView中看到了所有其他类型.
And*_*s F 13
我(迄今为止)唯一一个我使用COM-visible的.NET程序集也有一个枚举类型,它在OleView中显示得很好.我让整个库都是COM可见的
[ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)
没有必要.你的枚举类型是公开的吗?
发生的一件事是,不同的枚举与'枚举类型名称'''前缀':
public enum DataType
{
INT32,
FLOAT64,
INT8
}
Run Code Online (Sandbox Code Playgroud)
转换成:
typedef [...]
enum {
DataType_INT32 = 0,
DataType_FLOAT64 = 1,
DataType_INT8 = 2
} DataType;
Run Code Online (Sandbox Code Playgroud)
在类型库中.
VBScript 和其他后期绑定客户端使用 IDispatch 来调用对象的方法。因此,这些语言无法访问类型库中的类型信息——它们只是从 GUID 创建对象,获取 IDispatch 指针,然后开始按名称调用方法。
我不确定问题的 COM 互操作部分,但即使枚举确实显示在 OleView 中,您也无法直接使用它们。
但是,如果您能够在 typelib 中发布枚举,我很久以前就编写了一个工具,它可以生成一个脚本文件(vbs 或 js),其中包含 typelib 中的所有枚举作为常量。
请参阅此处: http: //www.kontrollbehov.com/tools/tlb2const/