【发布时间】:2012-01-30 15:21:10
【问题描述】:
我有一个通过 com-interop 暴露给 vb6 的 C# dll。这一切正常,但是当我将一组自定义对象从 .Net 传递到 VB6 时,我注意到了一些奇怪的事情。
从 VB6 访问数组让我感到困惑。如果我直接访问数组,我必须这样做:
Dim manager as New ObjectManager
'Access with two sets of parentheses:
msgbox manager.ReturnArrayOfObjects()(0).Name
但是,如果我先复制数组,我可以按照我通常期望的方式访问它:
Dim manager as New ObjectManager
Dim objectArray() As CustomObject
'copy the array
objectArray = manager.ReturnArrayOfObjects
'access normally:
msgbox objectArray(0).Name
在第一种情况下,我必须使用 two 组括号:manager.ReturnArrayOfObjects()(0).Name 在第二种情况下,我可以只使用 one 组括号:objectArray(0).Name
有人知道为什么会这样吗?我在互操作方面做错了吗?
这是 C# 互操作代码的快速存根/示例。
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("[Guid here...]")]
public interface IObjectManager
{
[DispId(1)]
CustomObject[] ReturnArrayOfObjects();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("[guid here...]")]
public class ObjectManager: IObjectManager
{
public CustomObject[] ReturnArrayOfObjects()
{
return new CustomObject[] { new CustomObject(), new CustomObject() };
}
}
CustomObject() 类也暴露于 com-interop 并且工作得很好。如果您需要我发布更多代码,请告诉我,但我认为这些小 sn-ps 足以很好地代表问题。
提前感谢您的帮助。
【问题讨论】:
标签: c# arrays vb6 com-interop