Есть переменная типа Array в Jscript, которую мне нужно передать в сборку C# .NET , зарегистрированнную как COM.
При попытке вызова метода сборки , в котором происходит передача массива, возникает ошибка "Specified cast is not valid".
Подскажите пожалуйста какой тип указать в процедуре сборки для переменной, которая получит ссылку на массив из Jscript в C#. И как потом получить значения массива, т.е. к какому типу приводить полученную ссылку.
Hello, "hydralisk"
> Есть переменная типа Array в Jscript, которую мне нужно передать в сборку C# .NET , зарегистрированнную как COM.
.NET понимает как Array переданные ему переменые содержащие SAFEARRAY. У JScript свои типы массивов — их нужно приводить к SAFEARRAY какнибудь руками...
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, hydralisk, Вы писали:
H>Есть переменная типа Array в Jscript, которую мне нужно передать в сборку C# .NET , зарегистрированнную как COM.
H>При попытке вызова метода сборки , в котором происходит передача массива, возникает ошибка "Specified cast is not valid".
H>Подскажите пожалуйста какой тип указать в процедуре сборки для переменной, которая получит ссылку на массив из Jscript в C#. И как потом получить значения массива, т.е. к какому типу приводить полученную ссылку.
Jscript то Jscript.Net или WSH? Если WSH, то это COM-овские массивы (скорее всего SAFEARRAY). Соотвесвтенно с про интероп с ними информацию и ищи.
Если это все же Jscript .Net то приведи хотя бы код о котором идет речь. Или гляно Рефлектором, что там за физический тип.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Здравствуйте, hydralisk, Вы писали:
VD>>Jscript то Jscript.Net или WSH? Если WSH, то это COM-овские массивы (скорее всего SAFEARRAY). Соотвесвтенно с про интероп с ними информацию и ищи.
H>Обычный JavaScript, не .NET
SafeArray
При импорте SafeArray из библиотеки типов в сборку .NET, массив конвертируется в одномерный массив известного типа (т.е. int[]). К элементам массива применяются те же правила конвертации типов, что и к параметрам. Так, например, SafeArray элементов типа BSTR становится управляемым массивом элементов типа String, а SafeArray из Variant'ов становится управляемым массивом элементов типа Object. Тип элементов SafeArray захватывается в именованный аргумент SafeArraySubType, передаваемый атрибуту MarshalAs, применяемому к параметру.
Поскольку размерность и границы массива нельзя узнать из библиотеки типов, размерность принимается за 1, а нижняя граница – за 0. Размерность и границы должны быть указаны в managed signature, создаваемой TlbImp. Если...
http://www.optim.ru/cs/2001/3/2net/2net.asp
MarshalAs SAFEARRAY
Наприер:
void New3([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VT_BSTR)]ref String[] ar);
Короче нужно смотреть, что возвращает ImportData. Можно попробовать следующее. Объявить аргумент как object и под отладчиком поглядеть, что там за вигня валяется. Боюсь, что JScript как всегода использует какие-то хэлперы.

... << RSDN@Home 1.1.4 beta 3 rev. 207>>