Вы уверены, что тип mInventoryMasterSearchSettings.PrintLabelsIDetail является стандартным массивом? (не коллекция или тип Arraylist)
Вы можете попробовать две вещи.
Первое - использовать директиву компилятора для принудительного использования массива как «безопасного» массива COM.
Public Property PrintLabelsIDetail() As <MarshalAs(UnmanagedType.SafeArray)> String()
Get
PrintLabelsIDetail = mInventoryMasterSearchSettings.PrintLabelsIDetail
End Get
Set(value As String())
mInventoryMasterSearchSettings.PrintLabelsIDetail = value
End Set
End Property
Итак, вышеизложенное может помочь упорядочить массив () строк для чего-то более совместимого со стороной COM с точки зрения потребления.
Другая идея? Вы можете выполнить приведение типа перед его возвратом.
Итак, скажем так:
Public Property PrintLabelsIDetail() As <MarshalAs(UnmanagedType.SafeArray)> String()
Get
PrintLabelsIDetail = DirectCast(mInventoryMasterSearchSettings.PrintLabelsIDetail, String())
End Get
Set(value As String())
mInventoryMasterSearchSettings.PrintLabelsIDetail = value
End Set
End Property
Кроме того, если массив типа string () не инициализирован, то вы Возможно, вы захотите убедиться, что это произошло до того, как вы вернете этот массив.
Как правило, вы МОЖЕТЕ передать массив со стороны COM на. net, но вы ИСПОЛЬЗУЕТЕ, что ДОЛЖНЫ отправить этот массив как byref, а НЕ byval.
Однако вы идете другим путем. . net -> сторона COM. Массив плоскости jane типа string обычно может go на стороне COM, и даже без директивы компилятора marshalas, приведенной выше.
Я бы попробовал ту или иную идею, или фактически, как это делает мой второй пример, попробуйте добавить и директиву компилятора маршала, и приведение.
Мой паук подсказывает, что тип данных PrintLabelsIDetail является коллекцией, iList или arrarylist, когда он должен быть array () строкового типа. Итак, проверьте тип данных PrintLabelsIDetail - я не проверял, но я не думаю, что COM будет даже нравиться arrayList вместо Array. И вам было бы неплохо инициализировать массив перед его отправкой по COM-мосту
Edit
У меня был кофе - прямая трансляция может получить вам COM / ActiveX-совместимый массив, но я " думаю, что это вполне может разорвать связь. (сторона VB6 будет изменять копию - она может не сохраняться в элементах COM-объекта) - поэтому попробуйте директиву компилятора без указания прямой трансляции