私はcom-interop経由でvb6にさらされたC#DLLを持っています。これはすべて動作していますが、カスタムオブジェクトの配列を.NetからVB6に渡すと、何か変わったことに気付いています。VB6配列構文の二重括弧(.com com-interopから渡される)
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
objectArray(0).Name
manager.ReturnArrayOfObjects()(0).Name
:私は括弧のセットを使用していた最初のケース
誰にこのようなケースが分かるのですか?多分私はinteropで何か間違っているのでしょうか?
ここには、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() };
}
}
クラスCustomObject()
は、com-interopにも公開されています。もうコードを投稿する必要があるかどうか教えてください。しかし、これらの小さなスニペットは問題を十分に表していると思います。
ご協力いただきありがとうございます。
ありがとうございました。それはあなたが説明するようになった今、かなり明白に見えますが、あなたは私がこの昨日どのくらいの間、私の脳をどれくらい長く揺らしているかは信じられません。私は本当に助けに感謝します。おかげさまで –