欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

javascript中AWTK綁定的原理是什么

這篇文章給大家介紹 javascript中AWTK綁定的原理是什么,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)公司是一家網(wǎng)站設計公司,集創(chuàng)意、互聯(lián)網(wǎng)應用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設服務商,主營產(chǎn)品:成都響應式網(wǎng)站建設、成都品牌網(wǎng)站建設網(wǎng)絡營銷推廣。我們專注企業(yè)品牌在網(wǎng)站中的整體樹立,網(wǎng)絡互動的體驗,以及在手機等移動端的優(yōu)質(zhì)呈現(xiàn)。成都網(wǎng)站建設、網(wǎng)站設計、移動互聯(lián)產(chǎn)品、網(wǎng)絡運營、VI設計、云產(chǎn)品.運維為核心業(yè)務。為用戶提供一站式解決方案,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞析悅目的作品,網(wǎng)站的價值服務。

一、基本架構(gòu)

Javascript的綁定方法和lua的綁定方法有些不同,主要原因是javascript的引擎有很多種,比如嵌入式系統(tǒng)常用的jerryscript和PC上常用的V8。不同的引擎提供注冊C/C++函數(shù)的能力不同,所以在綁定時我們只對引擎做一個最低能力的要求:提供注冊全局函數(shù)的能力。

我們把綁定的代碼分兩層:

  • 引擎相關的代碼負責把awtk的函數(shù)一一映射到js層面。

  • 引擎無關的代碼(awtk.ts)負責把awtk的函數(shù)包裝成面向?qū)ο蟮慕涌凇?/p>

這樣的好處有:

  • 實現(xiàn)簡單。綁定全局函數(shù)是最簡單的,而且每種引擎都有大量的示例可以參考。

  • 代碼的重用度高。awtk.ts的代碼產(chǎn)生器只需要一份即可。

  • 為上層提供一個統(tǒng)一的接口,換javascript引擎不會對上層應用程序造成影響。

二、引擎相關的代碼(jerryscript為例)

1.成員函數(shù)的綁定

C語言里面的成員函數(shù)其實都是全局函數(shù),按全局函數(shù)的綁定方式綁定即可,構(gòu)造函數(shù)和非構(gòu)造函數(shù)按同樣的方式處理。如:

jerry_value_t wrap_button_create(const jerry_value_t func_obj_val, const jerry_value_t this_p,
                                 const jerry_value_t args_p[], const jerry_length_t args_cnt) {
  widget_t* ret = NULL;
  widget_t* parent = (widget_t*)jerry_get_pointer(args_p[0], "widget_t*");
  xy_t x = (xy_t)jerry_get_number_value(args_p[1]);
  xy_t y = (xy_t)jerry_get_number_value(args_p[2]);
  wh_t w = (wh_t)jerry_get_number_value(args_p[3]);
  wh_t h = (wh_t)jerry_get_number_value(args_p[4]);
  ret = (widget_t*)button_create(parent, x, y, w, h);

  return jerry_create_pointer(ret, "button_t*");
};
jerryx_handler_register_global((const jerry_char_t*)"button_create", wrap_button_create);
2.對象屬性的綁定

對象的屬性轉(zhuǎn)換成set/get函數(shù),再按全局函數(shù)注冊。

jerry_value_t wrap_widget_t_set_prop_visible(const jerry_value_t func_obj_val,
                                             const jerry_value_t this_p,
                                             const jerry_value_t args_p[],
                                             const jerry_length_t args_cnt) {
  widget_t* obj = (widget_t*)jerry_get_pointer(args_p[0], "widget_t*");
  bool_t visible = (bool_t)jerry_get_boolean_value(args_p[1]);
  obj->visible = visible;
  return jerry_create_number(RET_OK);
}

jerry_value_t wrap_widget_t_get_prop_visible(const jerry_value_t func_obj_val,
                                             const jerry_value_t this_p,
                                             const jerry_value_t args_p[],
                                             const jerry_length_t args_cnt) {
  widget_t* obj = (widget_t*)jerry_get_pointer(args_p[0], "widget_t*");

  return jerry_create_boolean(obj->visible);
  
}
  jerryx_handler_register_global((const jerry_char_t*)"widget_t_set_prop_visible",
                                 wrap_widget_t_set_prop_visible);
  jerryx_handler_register_global((const jerry_char_t*)"widget_t_get_prop_visible",
                                 wrap_widget_t_get_prop_visible);
3.常量的綁定

常量的綁定,對每一個常量提供一個get函數(shù)即可。如:

jerry_value_t get_WIDGET_PROP_MAX_W(const jerry_value_t func_obj_val, const jerry_value_t this_p,
                                    const jerry_value_t args_p[], const jerry_length_t args_cnt) {
  return jerry_create_string_from_utf8((const jerry_char_t*)WIDGET_PROP_MAX_W);
}
jerryx_handler_register_global((const jerry_char_t*)"WIDGET_PROP_MAX_W", get_WIDGET_PROP_MAX_W);

三、引擎無相關的代碼

1.類的封裝

  • 每個類都有一個nativeObj成員,用來保存C語言中對象的句柄,在構(gòu)造時傳入。

  • 每個類都有一個靜態(tài)的create函數(shù),它負責調(diào)用C語言中的構(gòu)造函數(shù),并創(chuàng)建JS對象。

class Bitmap {
 public nativeObj;
 constructor(nativeObj) {
   this.nativeObj = nativeObj;
 }

 static create() {
   return new Bitmap(bitmap_create());
 }
 ...
}

2.對象屬性的封裝

這里利用了Typescript的set/get函數(shù),實現(xiàn)起來非常方便:

 set visible(value) {
   widget_t_set_prop_visible(this.nativeObj, value);
 }

 get visible() {
   return widget_t_get_prop_visible(this.nativeObj);
 }

3.成員函數(shù)封裝

自動使用nativeObj作為成員函數(shù)的第一個參數(shù),然后調(diào)用綁定的C函數(shù)。

 layout() {
   return widget_layout(this.nativeObj);
 }

4.常量的封裝

常量封裝為枚舉,幸運的是,Typescript枚舉可以是數(shù)字類型,也可以是字符串類型,實現(xiàn)起來非常方便。

enum AlignV {
 NONE = ALIGN_V_NONE(),
 MIDDLE = ALIGN_V_MIDDLE(),
 TOP = ALIGN_V_TOP(),
 BOTTOM = ALIGN_V_BOTTOM(),
};
enum WidgetProp {
 X = WIDGET_PROP_X(),
 Y = WIDGET_PROP_Y(),
 W = WIDGET_PROP_W(),
 H = WIDGET_PROP_H(),
 ...
};

四、自動代碼產(chǎn)生器

所有代碼均由自動代碼產(chǎn)生器根據(jù)awtk的IDL生成,具體請參考:tools/js_gen;

  • index.js負責產(chǎn)生引擎無關的代碼。

  • jerryscript.js負責產(chǎn)生jerryscript相關的代碼。

五、使用示例

function applicationInit() {
  var win = Window.create(null, 0, 0, 0, 0); 
  var ok = Button.create(win, 0, 0, 0, 0); 

  ok.setText("ok");
  ok.setSelfLayoutParams("center", "middle", "50%", "30");

  ok.on(EventType.CLICK, function(evt) {
    var e = PointerEvent.cast(evt);
    print("on click: " + e.x + " " + e.y);

    return Ret.OK;
  }); 

  win.layout();
}

applicationInit()

關于 javascript中AWTK綁定的原理是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)站題目:javascript中AWTK綁定的原理是什么
新聞來源:http://chinadenli.net/article2/jgipic.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機、外貿(mào)網(wǎng)站建設網(wǎng)站設計、企業(yè)網(wǎng)站制作、動態(tài)網(wǎng)站網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
久久亚洲午夜精品毛片| 日本高清一道一二三区四五区 | 99亚洲综合精品成人网色播| 日本人妻精品中文字幕不卡乱码| 亚洲一区二区欧美在线| 国产av一区二区三区麻豆| 色欧美一区二区三区在线| 亚洲av熟女国产一区二区三区站| 日本熟妇熟女久久综合| 国产乱久久亚洲国产精品| 免费在线播放一区二区| 欧美日韩国产综合在线| 日韩特级黄色大片在线观看| 一个人的久久精彩视频| 不卡视频在线一区二区三区| 国产精品第一香蕉视频| 国产精品午夜性色视频| 日本av在线不卡一区| 欧美区一区二区在线观看| 国产伦精品一区二区三区高清版| 国内外激情免费在线视频| 亚洲中文字幕视频在线观看| 精品欧美一区二区三久久| 亚洲中文字幕剧情在线播放| 日本午夜免费观看视频| 日本在线不卡高清欧美| 成人午夜爽爽爽免费视频| 亚洲国产综合久久天堂| 欧美成人精品国产成人综合| 欧美av人人妻av人人爽蜜桃| 欧美一二三区高清不卡| 日韩精品小视频在线观看| 日韩av欧美中文字幕| 日本加勒比不卡二三四区| 日韩美成人免费在线视频| 欧美色婷婷综合狠狠爱| 日韩一区中文免费视频| 亚洲永久一区二区三区在线| 亚洲一区二区三区精选| 欧美日韩精品久久亚洲区熟妇人| 高潮少妇高潮久久精品99|