Проблема с возвратом значений. [out] - НЕ РАБОТАЕТ.
От: U4 Россия  
Дата: 09.06.04 16:51
Оценка:
Есть интерфейс IDsScript.

MIDL
-----------------------------------------------------------------------------
interface IDsScript : IDispatch
{
...
[id(6),vararg] HRESULT ExecQuery2([out] long* rltcd,
[out] BSTR* buf,
[in] BSTR path,
[in] BSTR ft,
[in] SAFEARRAY(VARIANT)* arg );
};

С++
----------------------------------------------------------------------------
ExecQuery2( long* rltcd, BSTR* buf, BSTR path, BSTR ft, SAFEARRAY** arg )
{
...
*buf = SysAllocString( OLESTR( "Simple String" ) );
*rltcd = 15;
return S_OK;
}


JavaScript
----------------------------------------------------------------------------
var rltcd = 0;
var buf = "";
var path = "Типовые запросы.q";

ComDs.ExecQuery2( rltcd, buf, path, "s205070.1", "~1" );


ПРОБЛЕМА. Необходима записать в переменные rltcd, buf соответственно число и строку. В отладчике видно, что по этим адресам записываются нужные значения. Однако в JavaScript после выполнения метода значение этих переменных не изменились.

Пробывал ставить [in,out], не помогло. Удается возвращать значения в JavaScript только при объявлении метода как [out,retval], но таким способом можно вернуть значение всего одной переменной, которая обязаня стоять последним параметром в списке аргументов функции. Оба этих условия мне не подходят. Может кто-нибудь знает почему не срабатывает [out], буду очень признателен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.