Jscript Array -> ? Тип .NET
От: hydralisk  
Дата: 10.11.04 08:28
Оценка:
Есть переменная типа Array в Jscript, которую мне нужно передать в сборку C# .NET , зарегистрированнную как COM.
При попытке вызова метода сборки , в котором происходит передача массива, возникает ошибка "Specified cast is not valid".
Подскажите пожалуйста какой тип указать в процедуре сборки для переменной, которая получит ссылку на массив из Jscript в C#. И как потом получить значения массива, т.е. к какому типу приводить полученную ссылку.
Re: Jscript Array -> ? Тип .NET
От: TK Лес кывт.рф
Дата: 10.11.04 09:46
Оценка:
Hello, "hydralisk"
> Есть переменная типа Array в Jscript, которую мне нужно передать в сборку C# .NET , зарегистрированнную как COM.

.NET понимает как Array переданные ему переменые содержащие SAFEARRAY. У JScript свои типы массивов — их нужно приводить к SAFEARRAY какнибудь руками...
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Jscript Array -> ? Тип .NET
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 09:50
Оценка:
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Jscript Array -> ? Тип .NET
От: hydralisk  
Дата: 10.11.04 10:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Jscript то Jscript.Net или WSH? Если WSH, то это COM-овские массивы (скорее всего SAFEARRAY). Соотвесвтенно с про интероп с ними информацию и ищи.

Обычный JavaScript, не .NET
VD>Если это все же Jscript .Net то приведи хотя бы код о котором идет речь. Или гляно Рефлектором, что там за физический тип.

JScript
var aFields = new Array(iLen);
...
var oAI = new ActiveXObject("CRMBulkImport.ImportClass");
oAI.ImportData(aFields); // error

C#
namespace CRMBulkImport
...
public string ImportData(object[] aFields)
...
Re[3]: Jscript Array -> ? Тип .NET
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 11:08
Оценка:
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.