У меня есть компонент .Net, который имеет видимый класс COM с методом, возвращающим System.Array. Под капотом он возвращает массив строк, однако тип возвращаемого значения объявлен как System.Array. Не спрашивайте меня «почему», я знаю, что могу объявить возвращаемый тип как string [], и это будет нормально, но мой вопрос в особенности, когда он возвращает System.Array. Итак, для простоты метод .Net выглядит следующим образом:
public Array GetData()
{
return new string[] { };
}
Затем в проекте VB6, как бы я ни старался, я не могу получить доступ и пройти через элементы массива в виде строк. Ниже приведен фрагмент моего кода VB6, который не работает:
Dim objRetVal As Object
Dim resData As Variant
Dim strData As String
Set objRetVal = NetClassInstance.GetData()
For Each resData In objRetVal
strData = CStr(resData)
MsgBox "strData = " & strData
Next
Вышеупомянутый NetClassInstance является экземпляром класса COM Visible .Net в моем компоненте .Net. Таким образом, он все время терпит неудачу, он не может маршалировать System.Array в массив строк для VB6, который я могу зацикливать и получать доступ к строкам в массиве. Обратите внимание, что objRetVal не является Nothing и не пуст, в нем есть данные, просто resData не читает строковое значение в массиве.
Я знаю, что если я верну массив строк из моего метода .Net, то он, скорее всего, будет работать на конце VB6, но я хочу знать, есть ли способ выполнить надлежащий маршалинг и преобразовать возвращенный массив System.Array в массив string () на Сторона VB6.
objRetVal
Object
? Что не так с простоDim retVal() As String
иstrArr = NetClassInstance.GetData()
? - person Cody Gray   schedule 06.09.2016_Array
. Обычно вам также нужна ссылка на C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscorlib.tlb, чтобы VB6 понимал, как выглядит этот интерфейс. По-прежнему ничего вам не покупает, объявление интерфейса пустое и по-прежнему не позволяет скопировать массив. он все время терпит неудачу, недостаточно конкретен, чтобы угадать, что пойдет не так дальше. Лучше всего, чтобы не причинять себе вреда, измените тип возвращаемого значения на string [] или object []. - person Hans Passant   schedule 06.09.2016Array
вместоstring[]
? Что вы надеетесь получить от этого? - person xxbbcc   schedule 06.09.2016