我有一个C#类,它有一个类型为Microsoft.VisualBasic.Collection的属性(名称为List)。我们需要将此属性公开给COM。为此,我正在为我的类编写一个接口,以便该属性从UnmanagedType.IDispatch开始编组。 像这样:
[DispId(0x68030000)]
Collection List { [DispId(0x68030000)] [return: MarshalAs(UnmanagedType.IDispatch)] get; }
这段代码早于VB,并被C ++用作tye VT_DISPATCH。但是,在构建C#库时,我收到以下错误:
C:\ Program Files (86)\的MSBuild \ 14.0 \ BIN \ Microsoft.Common.CurrentVersion.targets(4335,5): 错误MSB3212:程序集" Name.dll"无法转换为 类型库。类型库导出器遇到错误 处理' Namespace.InterfaceName.get_List(#0),ProjectName'。错误: 加载类型库/ DLL时出错。
我在线阅读了一些帖子,这些帖子表明这些错误可能会因重复的GUID而导致。但事实并非如此。我试过多个GUID。我不觉得这是我在界面上设置的任何其他属性的问题,因为我能够成功编组其他属性和函数调用(其中一些使用原始类型,其他使用自定义类)。 / p>
这是在消费C ++应用程序中使用它的方式:
LPDISPATCH result;
InvokeHelper(0x68030000, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
这已经成为客户的上线问题,我真的没有太多时间继续调查,因为明天就要到了。
感谢任何帮助!
答案 0 :(得分:0)
我不认为Microsoft.VisualBasic.Collection
是COM可见的。因此,您不能将此类型用作COM类或接口中的返回值或参数。但是,ICollection
(Microsoft.VisualBasic.Collection
实现的)是COM可见的。如果这符合您的目的,请将其用作您的媒体资源类型,而不是Microsoft.VisualBasic.Collection
。