C# VB6数组语法中的双括号(从.Net com interop传递)

C# VB6数组语法中的双括号(从.Net com interop传递),c#,arrays,vb6,com-interop,C#,Arrays,Vb6,Com Interop,我有一个通过com互操作向vb6公开的C#dll。这一切都正常,但当我将一个自定义对象数组从.Net传递到VB6时,我注意到了一些奇怪的事情 从VB6访问阵列让我感到困惑。如果我直接访问阵列,我必须这样做: Dim管理器作为新的ObjectManager '使用两组括号访问: msgbox管理器.ReturnArrayOfObjects()(0).Name 但是,如果我先复制阵列,我可以以通常预期的方式访问它: Dim管理器作为新的ObjectManager Dim objectArray()

我有一个通过com互操作向vb6公开的C#dll。这一切都正常,但当我将一个自定义对象数组从.Net传递到VB6时,我注意到了一些奇怪的事情

从VB6访问阵列让我感到困惑。如果我直接访问阵列我必须这样做:

Dim管理器作为新的ObjectManager
'使用两组括号访问:
msgbox管理器.ReturnArrayOfObjects()(0).Name
但是,如果我先复制阵列,我可以以通常预期的方式访问它:

Dim管理器作为新的ObjectManager
Dim objectArray()作为CustomObject
'复制数组
objectArray=manager.ReturnArrayOfObjects
“正常访问:
msgbox objectArray(0)。名称
在第一种情况下,我必须使用两组括号:
manager.ReturnArrayOfObjects()(0)。Name
在第二种情况下,我只能使用一组括号:
objectArray(0)。Name

有人知道为什么会这样吗?也许我在互操作方面做错了什么

下面是C#互操作代码的快速存根/示例

[ComVisible(true)]
[接口类型(ComInterfaceType.InterfaceIsDual)]
[Guid(“[Guid此处…]”)
公共接口IObjectManager
{
[附表(1)]
CustomObject[]ReturnArrayOfObjects();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid(“[Guid此处…]”)
公共类对象管理器:IObjectManager
{
public CustomObject[]ReturnArrayOfObjects()
{
返回新的CustomObject[]{new CustomObject(),new CustomObject()};
}
}
CustomObject()
也暴露于com互操作中,工作正常。如果您需要我发布更多的代码,请告诉我,但我认为这些小片段足以说明问题

提前感谢您的帮助。

ReturnArrayOfObjects()
在C#code中是一种方法。VB6代码正在调用返回数组的方法,然后访问第一个元素。这两者的区别是什么

msgbox manager.ReturnArrayOfObjects()(0).Name 
还有这个

objectArray = manager.ReturnArrayOfObjects    
msgbox objectArray(0).Name 

在第二种情况下,您可以在不访问第一个元素的情况下自行调用该方法,而VB允许您在方法调用中省略括号。相反,当您直接访问第一个元素时,该语言不允许您省略括号。它只是一种语言特性,而不是“双括号数组语法”问题。

ReturnArrayOfObjects
是一种必须调用的方法。在VB6中,如果调用的方法没有提供任何参数,并且是整个语句,则可以省略括号


但是,在第一个示例中,您调用该方法,然后索引到该方法返回的数组中。您需要第一组括号来表示您没有向方法传递任何参数,然后第二组括号用于数组索引。

谢谢。现在你解释清楚了,这似乎很明显,但你不会相信我昨天为此绞尽脑汁了多久。我真的很感谢你的帮助。谢谢。你也完全正确。我很感激。将@Anthony Pegram标记为正确答案,因为他似乎刚刚提交。