взаимодействие с COM
От: Григорий Поваров Россия  
Дата: 28.09.05 07:42
Оценка:
Привет.

Хочется из JScript'а использовать метод .net-класса, который бы возвращал массив объектов (причем объектов специального типа, а не object).

Написал так:

    public TestResult[] GetArray()
    {
        return new TestResult[] {new TestResult()};
    }


JScript (var ar = new VBArray(test.GetArray()).toArray();) ругается, что invalid typecast.

Если изменить у метода возвращаемое значение с TestResult[] на object[], то все работает, но этот вариант неприемлем.

Если методу добавлять атрибуты
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_VARIANT)]

или
[return: MarshalAs(UnmanagedType.SafeArray, SafeArrayUserDefinedSubType=typeof(TestResult))]

То ничего не меняется.

Как это можно побороть?


Заранее благодарен.
Re: взаимодействие с COM
От: Григорий Поваров Россия  
Дата: 28.09.05 07:59
Оценка:
Уточню:
без атрибутов ругается "Предполагается наличие VBArray",
с SafeArraySubType=VarEnum.VT_VARIANT -- "Несоответствие типа",
с SafeArrayUserDefinedSubType=typeof(TestResult) -- "Предполагается наличие VBArray".
Re: взаимодействие с COM
От: Ocelot  
Дата: 28.09.05 08:28
Оценка:
Здравствуйте, Григорий Поваров, Вы писали:

ГП>Привет.


ГП>Хочется из JScript'а использовать метод .net-класса, который бы возвращал массив объектов (причем объектов специального типа, а не object).


ГП>Написал так:


ГП>
ГП>    public TestResult[] GetArray()
ГП>    {
ГП>        return new TestResult[] {new TestResult()};
ГП>    }
ГП>


ГП>JScript (var ar = new VBArray(test.GetArray()).toArray() ругается, что invalid typecast.


ГП>Если изменить у метода возвращаемое значение с TestResult[] на object[], то все работает, но этот вариант неприемлем.


Обычный JScript, не .NET, не поддерживает такой тип данных.
Попробуйте в TestResult реализовать поддержку IDispatch и отдавать SAFEARRAY(IDispatch).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.