У меня есть C # dll, выставленная vb6 через com-interop.Это все работает, но я замечаю нечто странное, когда я передаю массив пользовательских объектов из .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
В первом случае мне пришлось использовать два набора скобок: manager.ReturnArrayOfObjects()(0).Name
Во втором случае я мог просто использовать один набор скобок: 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()
также подвергаетсявзаимодействовать и работать просто отлично.Пожалуйста, дайте мне знать, если вам нужно, чтобы я разместил больше кода, но я думаю, что эти маленькие фрагменты достаточно хорошо представляют проблему для начала.
Заранее спасибо за вашу помощь.