Форум: "Потрепаться";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизКак передать указатели из 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c