[Sciter] Script 와 Native 의 상호작용
Script 와 Native 의 상호작용 기초
방식 을 간소화 하 다
Script 호출 Native
Native 호출 스 크 립 트
Script 와 Native 의 상호작용 기초
1 SDK 의 "plain - win" 예 를 참조 하여 창 클래스 를 사용자 정의 합 니 다. sciter: host < window > 와 sciter:: event 계승 합 니 다.handler
class window: public sciter::host<window>
, public sciter::event_handler
{
HWND _hwnd;
static LRESULT CALLBACK wnd_proc(HWND, UINT, WPARAM, LPARAM);
static window* ptr(HWND hwnd);
static bool init_class();
public:
// notification_handler traits:
HWND get_hwnd() const { return _hwnd; }
HINSTANCE get_resource_instance() const{ return ghInstance; }
window();
bool init(); // instance
bool is_valid() const { return _hwnd != 0; }
};
:
HWND get_hwnd() const { return _hwnd; }
HINSTANCE get_resource_instance() const{ return ghInstance; }
, host
2 , sciter::attach_dom_event_handler Sciter DOM
bool window::init()
{
SetWindowLongPtr(_hwnd, GWLP_USERDATA, LONG_PTR(this));
setup_callback();
// // attach event_handler to the window
sciter::attach_dom_event_handler(_hwnd, this);
load_file(L"res:default.htm");
return true;
}
SDK “ ”
- sciter-sdk/include/sciter-win-main.cpp - on Windows
- sciter-sdk/include/sciter-osx-main.mm - on OS X
- sciter-sdk/include/sciter-gtk-main.cpp - on Linux
sciter-win-main.cpp , , sciter::window
Script Native
, MFC
BEGIN_FUNCTION_MAP
FUNCTION_0("helloWorld", helloWorld);
FUNCTION_2("native_sum", native_sum); // 2 2
FUNCTION_0("native_api", native_api);
END_FUNCTION_MAP
sciter::string helloWorld() { return L"Hello u-minimal World"; }
int native_sum(sciter::value a, sciter::value b) { return a.d + b.d; }
sciter::value native_api() {
sciter::value api_map;
sciter::value api_math_map;
std::function<int(int,int)> native_sum = [](int a, int b) { return a + b; };
std::function<int(int,int)> native_sub = [](int a, int b) { return a - b; };
api_math_map.set_item(sciter::value("sum"), sciter::vfunc( native_sum ));
api_math_map.set_item(sciter::value("sub"), sciter::vfunc( native_sub ));
api_map.set_item(sciter::value("math"), api_math_map);
return api_map;
}
tiscript
<script type="text/tiscript">
var message = view.helloWorld();
view.native_sum(a, b);
view.nativeApi().math.sub(c, d);
</script>
view , Sciter , , close( ), msgbox( ),selectFile( ),Update 。
FUNCTION_MAP , view :view.native_sum(a, b)。
Native , native_api,view , view.native_api().math.xxx
sciter::value native_api() , Map , sciter::value, :
return {
math: {
sum: {native_sum},
sub: {native_sub},
}
}
Native Script
script :
<script type="text/tiscript">
namespace Test {
function add(n1,n2) { return n1+n2; }
}
</script>
Native :
sciter::dom::element root = self->get_root();
sciter::value r;
try {
r = root.call_function("Test.add",sciter::value(2),sciter::value(2));
} catch (sciter::script_error& err) {
std::cerr << err.what() << std::endl;
}
// or sciter::value r = self->call_function("Test.add",sciter::value(2),sciter::value(2));
assert(r.is_int() && r.get(0) == 4);
Test script
self sciter::host< window >
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.