编组 Microsoft.VisualBasic.Collection 到 COM
Marshalling Microsoft.VisualBasic.Collection to COM
我有一个 C# class,它有一个类型为 Microsoft.VisualBasic.Collection 的 属性(名称是列表)。我们需要将此 属性 暴露给 COM。为此,我正在为我的 class 编写一个接口,这样 属性 就会从 UnmanagedType.IDispatch 开始编组。
像这样:
[DispId(0x68030000)]
Collection List { [DispId(0x68030000)] [return: MarshalAs(UnmanagedType.IDispatch)] get; }
这段代码早于 VB,被 C++ 用作类型 VT_DISPATCH。但是,在构建 C# 库时,出现以下错误:
C:\Program Files
(x86)\MSBuild.0\bin\Microsoft.Common.CurrentVersion.targets(4335,5):
error MSB3212: The assembly "Name.dll" could not be converted to a
type library. Type library exporter encountered an error while
processing 'Namespace.InterfaceName.get_List(#0), ProjectName'. Error:
Error loading type library/DLL.
我阅读了一些在线帖子,这些帖子表明此类错误可能是由于重复的 GUID 造成的。但事实并非如此。我尝试使用多个 GUID。我不觉得这是我在界面上设置的任何其他属性的问题,因为我能够编组其他属性和函数调用(其中一些使用原始类型,其他使用自定义 classes)成功。
这是它在消费 C++ 应用程序中的消费方式:
LPDISPATCH result;
InvokeHelper(0x68030000, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
这已成为客户的上线问题,我真的没有太多时间继续调查,因为这是明天到期的。
感谢任何帮助!
我不认为 Microsoft.VisualBasic.Collection
是 COM 可见的。因此,您不能将此类型用作 COM class 或接口中的 return 值或参数。但是,ICollection
(Microsoft.VisualBasic.Collection
实现)是 COM 可见的。如果这适合您的目的,请将其用作 属性 而不是 Microsoft.VisualBasic.Collection
.
的类型
我有一个 C# class,它有一个类型为 Microsoft.VisualBasic.Collection 的 属性(名称是列表)。我们需要将此 属性 暴露给 COM。为此,我正在为我的 class 编写一个接口,这样 属性 就会从 UnmanagedType.IDispatch 开始编组。 像这样:
[DispId(0x68030000)]
Collection List { [DispId(0x68030000)] [return: MarshalAs(UnmanagedType.IDispatch)] get; }
这段代码早于 VB,被 C++ 用作类型 VT_DISPATCH。但是,在构建 C# 库时,出现以下错误:
C:\Program Files (x86)\MSBuild.0\bin\Microsoft.Common.CurrentVersion.targets(4335,5): error MSB3212: The assembly "Name.dll" could not be converted to a type library. Type library exporter encountered an error while processing 'Namespace.InterfaceName.get_List(#0), ProjectName'. Error: Error loading type library/DLL.
我阅读了一些在线帖子,这些帖子表明此类错误可能是由于重复的 GUID 造成的。但事实并非如此。我尝试使用多个 GUID。我不觉得这是我在界面上设置的任何其他属性的问题,因为我能够编组其他属性和函数调用(其中一些使用原始类型,其他使用自定义 classes)成功。
这是它在消费 C++ 应用程序中的消费方式:
LPDISPATCH result;
InvokeHelper(0x68030000, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
这已成为客户的上线问题,我真的没有太多时间继续调查,因为这是明天到期的。
感谢任何帮助!
我不认为 Microsoft.VisualBasic.Collection
是 COM 可见的。因此,您不能将此类型用作 COM class 或接口中的 return 值或参数。但是,ICollection
(Microsoft.VisualBasic.Collection
实现)是 COM 可见的。如果这适合您的目的,请将其用作 属性 而不是 Microsoft.VisualBasic.Collection
.