【发布时间】:2018-10-26 23:35:51
【问题描述】:
我有一个 C# 类,它有一个 Microsoft.VisualBasic.Collection 类型的属性(名称是 List)。我们需要将此属性暴露给 COM。为此,我正在为我的类编写一个接口,以便从 UnmanagedType.IDispatch 中编组该属性。 像这样的:
[DispId(0x68030000)]
Collection List { [DispId(0x68030000)] [return: MarshalAs(UnmanagedType.IDispatch)] get; }
这段代码在 VB 的早期版本中被 C++ 用作 VT_DISPATCH。但是,在构建 C# 库时,出现以下错误:
C:\程序文件 (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(4335,5): 错误 MSB3212:程序集“Name.dll”无法转换为 类型库。类型库导出器在执行时遇到错误 处理'Namespace.InterfaceName.get_List(#0), ProjectName'。错误: 加载类型库/DLL 时出错。
我阅读了一些在线帖子,这些帖子表明此类错误可能是由于重复的 GUID 而导致的。但事实并非如此。我尝试了多个 GUID。我不认为这是我在接口上设置的任何其他属性的问题,因为我能够成功编组其他属性和函数调用(其中一些使用原始类型,而另一些使用自定义类)。
这是它在消费 C++ 应用程序中的消费方式:
LPDISPATCH result;
InvokeHelper(0x68030000, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
这已成为客户的上线问题,我真的没有太多时间继续调查,因为明天到期。
感谢任何帮助!
【问题讨论】:
标签: c# vb.net collections com interop