首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB6数组语法中的双括号(从.Net com-interop传递)

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

Stack Overflow用户
提问于 2011-12-30 15:12:36
回答 2查看 754关注 0票数 2

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

从VB6访问数组使我感到困惑。如果我直接访问数组(),我必须这样做:

代码语言:javascript
复制
Dim manager as New ObjectManager

'Access with two sets of parentheses:
msgbox manager.ReturnArrayOfObjects()(0).Name

但是,如果我首先复制数组,我可以访问它,通常我希望:

代码语言:javascript
复制
Dim manager as New ObjectManager
Dim objectArray() As CustomObject

'copy the array
objectArray = manager.ReturnArrayOfObjects

'access normally:
msgbox objectArray(0).Name  

在第一种情况下,我必须使用,两组括号:manager.ReturnArrayOfObjects()(0).Name,在第二种情况下,我只需要使用1括号集:objectArray(0).Name

有人知道为什么会这样吗?我在这里做错什么了吗?

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

代码语言:javascript
复制
[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-互操作中,并且工作得很好。如果你需要我发布更多的代码,请告诉我,但是我认为这些小片段很好地代表了这个问题。

提前谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-30 15:16:35

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

代码语言:javascript
复制
msgbox manager.ReturnArrayOfObjects()(0).Name 

还有这个

代码语言:javascript
复制
objectArray = manager.ReturnArrayOfObjects    
msgbox objectArray(0).Name 

在第二种情况下,无需访问第一个元素就可以单独调用该方法,而VB允许您从方法调用中删除括号。相反,在直接访问第一个元素时,语言不允许您去掉括号。这只是一个语言特性,不是“双括号数组语法”问题。

票数 8
EN

Stack Overflow用户

发布于 2011-12-30 15:17:39

ReturnArrayOfObjects是一个必须调用的方法。在VB6中,如果您调用一个方法而不提供任何参数,并且它是整个语句,那么您可以省略括号。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8680875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档