sciter: проблема с вызовом c++ -> tiscript
От: dr.Benzin  
Дата: 03.03.09 18:38
Оценка: 36 (1)
Не получается вызвать из плюса, tiscript'овую функцию. Для простоты, в качестве плюсового кода использовал исходники сэмпла 'minimal' из Sciter SDK. Модифицировал их следующим образом:

//  LPCBYTE pb = 0;
//  UINT   cb = 0;
//  GetResource(L"default.html",pb,cb);
//  assert( pb && cb );
//  SciterLoadHtml(hwnd, pb,cb, NULL ); 
  SciterLoadFile(hwnd, L"sample.htm");

    std::string functionName("foo");
    tiscript::VM* vm = SciterGetVM(hwnd);
    tiscript::pinned func(vm);
    tiscript::value ns = tiscript::get_global_ns(vm);

    func = tiscript::get_prop(vm, ns, functionName.c_str()); 

    if( !tiscript::is_function(func) ) {
        return NULL;
    }

Код непосредственно вызывающий функцию не привожу, т.к. до него дело не доходит. Т.е. is_function возвращает false. Вот sample.htm:

<html>

<script type="text/tiscript">
function foo() {
    view.msgbox(#info, "foo called");
}
</script>

</html>
Re: sciter: проблема с вызовом c++ -> tiscript
От: c-smile Канада http://terrainformatica.com
Дата: 04.03.09 06:53
Оценка:
Здравствуйте, dr.Benzin, Вы писали:

DB>Не получается вызвать из плюса, tiscript'овую функцию. Для простоты, в качестве плюсового кода использовал исходники сэмпла 'minimal' из Sciter SDK. Модифицировал их следующим образом:

...

Дело в том что global namespace (tiscript::get_global_ns(vm))
это не то место где живут объекты загруженного документа.

При загрузке документа для него создается свой namespace (что есть обычный объект — "вешалка")
В этом ns живут такие объекты как self и view.

Проблема в том что я забыл выставить наружу метод:
SCDOM_RESULT SCAPI SciterGetElementNamespace(  HELEMENT he, tiscript_value* pval);


Завтра буду делать билд — появится.

Последовательность такая:

    SciterLoadFile(hwnd, L"sample.htm");
    HELEMENT root = dom::element::root_element(hwnd);

    std::string functionName("foo");
    tiscript::VM* vm = SciterGetVM(hwnd);
    tiscript::pinned func(vm);
    tiscript::value ns; SciterGetElementNamespace(root,&ns);
    ....
    func = tiscript::get_prop(vm, ns, functionName.c_str());
Re[2]: sciter: проблема с вызовом c++ -> tiscript
От: dr.Benzin  
Дата: 04.03.09 14:24
Оценка:
Спасибо. С нетерпением жду билда
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.