COM && SAFEARRAY && Java Script
От: Аноним  
Дата: 09.12.04 06:26
Оценка:
хочу из Java Script в свой COM передавать данные через SAFEARRAY.

данные буду передавать следующие:
    числа (пример: 1, 34, 765)
    строки (пример: "asd", "a", "dj35")
если я не ошибаюсь, то и числа можно будет как строку передавать.

в методе хотелось бы получать данные вот в такую вот переменную:
CComBSTR    bstrVal;


как мне надо определить парамерт в мотоде через который я буду передавать данные в COM?
и нужно ли делать какие-нибудь преобразования чтобы получить данные в указанную выше переменную?

спасибо.
Переменное число параметров из Java Script в COM
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 09.12.04 06:48
Оценка: 11 (2)
#Имя: FAQ.com.script.vararg
А>хочу из Java Script в свой COM передавать данные через SAFEARRAY.

А>данные буду передавать следующие:

А>числа (пример: 1, 34, 765)
А>строки (пример: "asd", "a", "dj35")

если проблема в том что неизвестно заранее число параметров и их тип, то так:

[id(1), helpstring("Метод с переменным числом аргументов"), vararg] 
HRESULT MethodName([in] SAFEARRAY(VARIANT) *params );

STDMETHODIMP CCoClass::MethodName(/*[in]*/ SAFEARRAY* *params )
{
 ....
}

в скрипте это будет:

obj.MethodName( 1, 34, 765 );
obj.MethodName( "asd", "a", "dj35" );
obj.MethodName( 1, "asd", 765, "a", "b" );
Re[2]: COM && SAFEARRAY && Java Script
От: Аноним  
Дата: 09.12.04 08:17
Оценка:
Здравствуйте, Odi$$ey, Вы писали:
OE>если проблема в том что неизвестно заранее число параметров и их тип, то так:

OE>
OE>[id(1), helpstring("Метод с переменным числом аргументов"), vararg] 
OE>HRESULT MethodName([in] SAFEARRAY(VARIANT) *params );
OE>

OE>
OE>STDMETHODIMP CCoClass::MethodName(/*[in]*/ SAFEARRAY* *params )
OE>{
OE> ....
OE>}
OE>

OE>в скрипте будет:

OE>
OE>obj.MethodName( 1, 34, 765 );
OE>obj.MethodName( "asd", "a", "dj35" );
OE>

OE>ы?

спасибо, буду пробовать ...
Re[2]: COM && SAFEARRAY && Java Script
От: Аноним  
Дата: 14.12.04 06:17
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>
OE>[id(1), helpstring("Метод с переменным числом аргументов"), vararg] 
OE>HRESULT MethodName([in] SAFEARRAY(VARIANT) *params );
OE>

OE>
OE>STDMETHODIMP CCoClass::MethodName(/*[in]*/ SAFEARRAY* *params )
OE>{
OE> ....
OE>}
OE>

OE>в скрипте будет:

OE>
OE>obj.MethodName( 1, 34, 765 );
OE>obj.MethodName( "asd", "a", "dj35" );
OE>


сделал так...
далее на Java Script создаю массивы (у меня в метод уходит 2 массива)
[id(1), helpstring("Метод с переменным числом аргументов"), vararg] 
HRESULT MethodName([in] SAFEARRAY(VARIANT) *iParams, [in] SAFEARRAY(VARIANT) *jParam);


var    iParam = new Array(), jParam = new Array();


и отправляю в метод
ComObject.MethodName(iParam, jParam);


эксплорер ругается, мол типа

как это побороть?

спасибо.
Re[3]: COM && SAFEARRAY && Java Script
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 14.12.04 06:35
Оценка:
Здравствуйте, <Аноним>, Вы писали:

OE>>в скрипте будет:


obj.MethodName( 1, 34, 765 );
obj.MethodName( "asd", "a", "dj35" );


А>сделал так...

А>далее на Java Script создаю массивы (у меня в метод уходит 2 массива)

var    iParam = new Array(), jParam = new Array();


А>и отправляю в метод

А>эксплорер ругается, мол типа
А>Type mismatch

А>как это побороть?


JScript-овский объект Array не имеет никакого отношения к SAFEARRAY(VARIANT), если нужна стыковка с ним, MSDN рекомендует использовать в jscript объект VBArray
Re[4]: COM && SAFEARRAY && Java Script
От: Аноним  
Дата: 14.12.04 06:46
Оценка:
Здравствуйте, Odi$$ey, Вы писали:
OE>JScript-овский объект Array не имеет никакого отношения к SAFEARRAY(VARIANT), если нужна стыковка с ним, MSDN рекомендует использовать в jscript объект VBArray

это как?
как я понял надо писать так
var    iParam = new VBArray(), jParam = new VBArray();


но опять же вылетает ошибка
VBArray expected

подскажите как сделать (лучше было бы на примере, а то я еще новичок)

спасибо.
Re[5]: COM && SAFEARRAY && Java Script
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 14.12.04 07:04
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>но опять же вылетает ошибка

А>VBArray expected

VBArrays are read-only, and cannot be created directly. The safeArray argument must have obtained a VBArray value before being passed to the VBArray constructor. This can only be done by retrieving the value from an existing ActiveX or other object.


А>подскажите как сделать (лучше было бы на примере, а то я еще новичок)


ms-help://MS.MSDNQTR.2003APR.1033/script56/html/js56jsobjvbarray.htm

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         document.writeln(k)
         k = k + 1
      Next
      document.writeln("vbCRLF")
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vbarray){
   var a = new VBArray(vbarray);
   var b = a.toArray();
   var i;
   for (i = 0; i < 9; i++) 
   {
      document.writeln(b[i]);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT LANGUAGE="JScript">
<!--
   VBArrayTest(CreateVBArray());
-->
</SCRIPT>
</BODY>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.