Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Как передать указатели из JScript в ActiveX компонент   Найти похожие ветки 

 
io   (2004-03-10 15:20) [0]

Проблема в следующем:
есть серверный сценарий на JScript, который создает ActiveX обьект;
в обьекте есть функция, которая имеет несколько параметров в модификаторами out;
Вот код:
<%
 var Admin = Server.CreateObject("WebAdmin.CWebAdmin");
 var CodPub;
 var DocName;
 var PubDate;
 var Remark;
 var DActive;
 var DocId = Request.Form("edDocId");
 Admin.GetDocInfo(DocId, CodPub, DActive, DocName, PubDate, Remark);
%>


Но после вызова процедуры переменные остаются без значения.
Что делать?

Заранее благодарен.


 
Ломброзо ©   (2004-03-10 15:30) [1]

в IDL объявить оные как in/out


 
DiamondShark ©   (2004-03-10 15:31) [2]


> Что делать?

Либо переписать кусок на VBScript, либо сделать параметры GetDocument типа Variant, либо переписать, чтоб возвращался объект:

var di;
di = Admin.GetDocInfo();
DocName := di.docName;
и т.д.

Если изменить класс WebAdmin.CWebAdmin не представляется возможным -- курить бамбук.


 
IGOREK ©   (2004-03-10 16:53) [3]

Привет всем, это был я. Спасибо всем ответившим.
Класс CWebAdmin делаю я, потому и могу изменить.

> Ломброзо ©   (10.03.04 15:30) [1]
> в IDL объявить оные как in/out

Обьект написан на Дельфи. Поставил in/out - ноль ефекта.

На VBScript не переписывал. Пока просто подобавлял отдельные функции на каждое значение - retval нормально работает. Криво конечно, но нету времени пока разбираться.


> var di;
> di = Admin.GetDocInfo();

Это наверно VBScript бо оно ругается на такую конструкцию.


 
DiamondShark ©   (2004-03-10 18:33) [4]


> > var di;
> > di = Admin.GetDocInfo();
>
> Это наверно VBScript бо оно ругается на такую конструкцию.

Подразумевалось, что это JScript.
Метод GetDocInfo должен вернуть объект, это его так переделать надо было.


 
IGOREK ©   (2004-03-11 13:57) [5]


> DiamondShark ©   (10.03.04 18:33) [4]
> Подразумевалось, что это JScript.
> Метод GetDocInfo должен вернуть объект, это его так переделать
> надо было.

А откуда в сценарии известен обьект, его поля? Публиковать в TypeLib?


 
Ломброзо ©   (2004-03-11 14:32) [6]

не мойшет быть ноль эффекта. Вам известна разница меж#ду передачей параметров по ссылке и по значению? in-out - это аналог var. Вполне возможно, что IDE IDL изменила, а модификатор var или out (не помню точно) в паскалевский код не вставила.


 
DiamondShark ©   (2004-03-11 15:44) [7]


> А откуда в сценарии известен обьект, его поля? Публиковать
> в TypeLib?

Как откуда известен? Это ж IDispatch.
Script-engine всегда использует GetIDsOfNames/Invoke.
Публиковать. Или IDispatch вручную реализовывать. Тут на любителя ;-)


> Ломброзо ©   (11.03.04 14:32) [6]

И очень даже мойшет. Если вспомнить, что у жаба-скрипта в принципе отсутствуют атомарные типы, всё -- объекты. А параметры у метода -- типизированные. Поэтому жаба-скрипт передаёт методу не сами ссылки на объекты, а временные переменные.
А вот если бы параметры были не атомарных типов, а variant, то скрипт бы передал туда сами объекты.
Если же тот же самый кусок перепейсать на ВыБыСкрипт, то передались бы переменные по ссылке.


 
Ломброзо ©   (2004-03-11 16:02) [8]

да какие там объекты... в JScript такие же Variantы, что и в VB, в том числе с vt = VT_DISPATCH


 
DiamondShark ©   (2004-03-11 18:09) [9]


> в том числе с vt = VT_DISPATCH

Не "в том числе с...", "а исключительно с..."
Это ж всё руками щупалось... Собственными.

Пишем на VBScript:
Dim a
Dim b
a = 123
b = "halabalavsedela"

То же на JScript:
var a;
var b;
a = 123;
b = "trulalabhaibhai";

В первом случае будем иметь VT_I4 и VT_BSTR, во втором -- только VT_DISPATCH

Я этот случай описывал в комментариях к статье на "Королевстве".


 
Ломброзо ©   (2004-03-11 18:16) [10]

хех... аспасибо, не знал...
Урлъ! :-)

так что же это получается - в JScript все простые типы данных в каких-то внутренних контейнерах (хэшах или там, мапах) ком-объектов хранятся? не ведёт ли сие к прожорливости?


 
DiamondShark ©   (2004-03-11 18:44) [11]

Урль здесь
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=737

Но сомнения взяли... Сечас погонял свой же примерчик (Step6 из архива к статье)...
Блин. Что жаба, что васик -- показывают VT_I4 и VT_BSTR

Получается, что я гоню.


 
DiamondShark ©   (2004-03-11 18:51) [12]

А с другой стороны... почему я так был в этом уверен?
И в комментариях так же сказал... Помню же, что прежде чем писать, пробовал на программе... бр-рр....


 
Ломброзо ©   (2004-03-11 18:59) [13]

похоже, что в кишках у него происходит обычное разруливание вартайпа варианта... Вот код:

var pObj = new Object;
//pObj.test = new Object; - раскомментировать - результат тот же
pObj.test = 10; // показывает цифру
// pObj.test = pObj; // показывает объект
WScript.Echo(pObj.test);

А вообще - движок-то у них один... просто парсеры и всякие там синтаксические анализаторы (или как они там называются) разные...



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.048 c
3-1078231598
Rule
2004-03-02 15:46
2004.04.04
Опять я и опять пробеммы с Мидасом


14-1079093706
Murad
2004-03-12 15:15
2004.04.04
"include" в XML


14-1078648724
juiceman
2004-03-07 11:38
2004.04.04
остановить сервис


14-1078503179
Натуся
2004-03-05 19:12
2004.04.04
Иконка HTML


9-1064127278
Ландграф Павел
2003-09-21 10:54
2004.04.04
Создаю игру (2D RPG) - напишите мнение пожалуйста...