Joe*_*ung 2 c# arrays vb6 com-interop
我有一个C#dll通过com-interop暴露给vb6.这一切都有效,但是当我将.Net的自定义对象数组传递给VB6时,我注意到了一些奇怪的事情.
从VB6访问数组让我感到困惑.如果我直接访问数组,我必须这样做:
Dim manager as New ObjectManager
'Access with two sets of parentheses:
msgbox manager.ReturnArrayOfObjects()(0).Name
Run Code Online (Sandbox Code Playgroud)
但是,如果我先复制数组,我可以访问它通常所期望的:
Dim manager as New ObjectManager
Dim objectArray() As CustomObject
'copy the array
objectArray = manager.ReturnArrayOfObjects
'access normally:
msgbox objectArray(0).Name
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,我不得不用2套括号:manager.ReturnArrayOfObjects()(0).Name 在第二种情况下,我可以只使用一个括号中:objectArray(0).Name
有谁知道为什么会这样?我可能在这里做错了吗?
这是C#interop代码的快速存根/示例.
[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() };
}
}
Run Code Online (Sandbox Code Playgroud)
该课程CustomObject()也接触到com-interop并且工作得很好.如果您需要我发布更多代码,请告诉我,但我认为这些小片段代表了这个问题.
在此先感谢您的帮助.
ReturnArrayOfObjects()在C#代码中是一种方法.您的VB6代码正在调用该方法,该方法返回数组,然后访问第一个元素.这个区别
msgbox manager.ReturnArrayOfObjects()(0).Name
Run Code Online (Sandbox Code Playgroud)
还有这个
objectArray = manager.ReturnArrayOfObjects
msgbox objectArray(0).Name
Run Code Online (Sandbox Code Playgroud)
在第二个中,您在不访问第一个元素的情况下自己调用方法,VB允许您从方法调用中省略括号.相反,当您直接访问第一个元素时,该语言不允许您放弃括号.它只是一种语言功能,它不是"双括号数组语法"问题.