Знаю, что тема передачи массива байт из .NET сборки в код на JScript поднималась и обсуждалась тут неоднократно, но тем не менее, решения найденные мной посты не дали.
Собственно задача проста. Есть тип .NET, один из методов которого возвращает массив байт
Здравствуйте, Syd, Вы писали:
Syd>Знаю, что тема передачи массива байт из .NET сборки в код на JScript поднималась и обсуждалась тут неоднократно, но тем не менее, решения найденные мной посты не дали.
Нет массива байт для скриптов. Ни для каких. Есть массив вариантов. Вот как хочешь, так и выкручивайся. Либо передавай этот массив байт далее по цепочке обработки.
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, Syd, Вы писали:
Syd>>Знаю, что тема передачи массива байт из .NET сборки в код на JScript поднималась и обсуждалась тут неоднократно, но тем не менее, решения найденные мной посты не дали.
Vi2>Нет массива байт для скриптов. Ни для каких. Есть массив вариантов. Вот как хочешь, так и выкручивайся. Либо передавай этот массив байт далее по цепочке обработки.
Это, в принципе, ясно. Я просто не совсем пойму: COM (через CCW) вроде как возвращает Safearray, которым можно в JScript инициализировать объект VBArray, чтобы уже из него вытащить объект Array. Только вот что-то не выходит...
I'm just talking about having fun
Re[3]: массив байт по маршруту .NET -> COM Interop -> JScrip
Здравствуйте, Syd, Вы писали:
Syd>Это, в принципе, ясно. Я просто не совсем пойму: COM (через CCW) вроде как возвращает Safearray, которым можно в JScript инициализировать объект VBArray, чтобы уже из него вытащить объект Array. Только вот что-то не выходит...
Снова придется повторить: "Нет массива байт для скриптов. Ни для каких. Есть массив вариантов." И нет массива строк, нет массива целых чисел. Есть только массив вариантов, которые, в свою очередь, могут содержать и байты, и строки, и числа и т.п. Я не знаю, как это должно выглядеть на .NET, но, наверное, public Object[] SomeMethod(string param).
Syd>Это, в принципе, ясно. Я просто не совсем пойму: COM (через CCW) вроде как возвращает Safearray, которым можно в JScript инициализировать объект VBArray, чтобы уже из него вытащить объект Array. Только вот что-то не выходит...
Чтобы JS смог увидеть как VBArray Safearray, ему нужно передать Savearray(VARIANT). ни с каким другим (SafeArray(char), SafeArray(long)) он работать не будет. Кстати, Visual Basic в этом отношении ведёт себя точно так же.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: массив байт по маршруту .NET -> COM Interop -> JScrip
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, Syd, Вы писали:
Syd>>Это, в принципе, ясно. Я просто не совсем пойму: COM (через CCW) вроде как возвращает Safearray, которым можно в JScript инициализировать объект VBArray, чтобы уже из него вытащить объект Array. Только вот что-то не выходит...
Vi2>Снова придется повторить: "Нет массива байт для скриптов. Ни для каких. Есть массив вариантов." И нет массива строк, нет массива целых чисел. Есть только массив вариантов, которые, в свою очередь, могут содержать и байты, и строки, и числа и т.п. Я не знаю, как это должно выглядеть на .NET, но, наверное, public Object[] SomeMethod(string param).
Да, с возвращением Object[] все работает, а вот если нужно возвращать byte[]? Сборка используется как в скриптовом, так и в .NET окружении.
Заранее прошу прощения за "невежественность", но срок знакомства с миром .NET — 3 недели.
I'm just talking about having fun
Re[5]: массив байт по маршруту .NET -> COM Interop -> JScrip
Здравствуйте, Syd, Вы писали:
Syd>Да, с возвращением Object[] все работает, а вот если нужно возвращать byte[]?
В скрипте — никак. Никак. НИКАК.
Добавь еще и метод который возвращает варианты, если нужно и массив байтов и в скрипте.
Еще можно попробовать дополнительный обработчик (компонент), который бы массив байтов транслировал бы в массив вариантов. Либо сразу в JSArray. Типа вот так:
var res = test.SomeMethod("test"));
var tranlator = new ActiveXObject(<ProgId here>);
var array_of_variants = tranlator.ToArayOfVariants(res);
var jsarray1 = new VBArray(array_of_variants);
var jsarray2 = tranlator.ToJSAray(res);
GS
Re[6]: массив байт по маршруту .NET -> COM Interop -> JScrip
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, Syd, Вы писали:
Syd>>Да, с возвращением Object[] все работает, а вот если нужно возвращать byte[]?
GS>В скрипте — никак. Никак. НИКАК.
GS>Добавь еще и метод который возвращает варианты, если нужно и массив байтов и в скрипте.
Так уже и сделал.
GS>Еще можно попробовать дополнительный обработчик (компонент), который бы массив байтов транслировал бы в массив вариантов. Либо сразу в JSArray. Типа вот так:
GS>
GS>var res = test.SomeMethod("test"));
GS>var tranlator = new ActiveXObject(<ProgId here>);
GS>var array_of_variants = tranlator.ToArayOfVariants(res);
GS>var jsarray1 = new VBArray(array_of_variants);
GS>var jsarray2 = tranlator.ToJSAray(res);
GS>
Большой необходимости в этом варианте нет.
В общем, все спасибо, проблема решена, а главное, понята.