日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

v8学习笔记(八) 【JS与C++互调】

發(fā)布時(shí)間:2024/4/15 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 v8学习笔记(八) 【JS与C++互调】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

v8 JS與C++互調(diào)

**************************v8JS調(diào)C++:注冊(cè)回調(diào)函數(shù)*****************************

?

JS調(diào)C++數(shù)據(jù):訪問(wèn)器(Accessor)?? (直接訪問(wèn))

(1)定義C++回調(diào)函數(shù)Getter/Setter

(2)Context全局對(duì)象模板(ObjectTemplate)注冊(cè)Getter/Setter

?

?

?

JS調(diào)C++函數(shù):(Context)全局對(duì)象模板ObjectTemplate注冊(cè)回調(diào)函數(shù)(通過(guò)v8::Arguments傳遞參數(shù))

???????? Template::Set(Handle<String> name, Handle<Data> value,PropertyAttribute attributes = None);

?

?

JS調(diào)C++對(duì)象:(通過(guò)CPPObj.XXX訪問(wèn))

1.C++對(duì)象映射成(v8_API)JS對(duì)象,加入JS運(yùn)行時(shí)環(huán)境(Context):?????????????????????????????????? ??????C++類映射成ObjectTemplate對(duì)象

?????????????????? (1)創(chuàng)建JS對(duì)象模板ObjectTemplate:???

???????????????????????????????????? Handle<ObjectTemplate> JSObjTempl = ObjectTemplate::New();

?????????????????? (2)設(shè)置對(duì)象模板內(nèi)部域:????????????????

???????????????????????????????????? JSObjTempl->SetInternalFieldCount(1);

?????????????????? (3)創(chuàng)建JS對(duì)象:

???????????????????????????????????? Local<Object> JSObj=JSObjTempl->NewInstance();

?????????????????? (3)C++對(duì)象包裝成(External)外部對(duì)象,放入JS對(duì)象內(nèi)部域:???????

???????????????????????????????????? ClassA* p=new ClassA(3,7);

???????????????????????????????????? Local<External> Ext=External::New(p);

???????????????????????????????????? JSObj->SetInternalField(0,Ext);

?????????????????? (4)JS對(duì)象放入運(yùn)行時(shí)環(huán)境(全局對(duì)象)?

???????????????????????????????????? context->Global()->Set(String::New("ClassA"),JSObj);

????????????????????????????????????

2.調(diào)C++對(duì)象的成員數(shù)據(jù):JS對(duì)象模板注冊(cè)Getter/Setter回調(diào)函數(shù)

?????????????????? JSObjTempl->SetAccessor(String::New("x"),GetCPPObj_X,SetCPPObj_X);

?????????????????? JSObjTempl->SetAccessor(String::New("y"),GetCPPObj_Y,SetCPPObj_Y);

3.調(diào)C++對(duì)象的成員函數(shù):JS對(duì)象模板注冊(cè)回調(diào)函數(shù),通過(guò)回調(diào)函數(shù)調(diào)用成員函數(shù)

?????????????????? JSObjTempl->Set(String::New("method_a"), FunctionTemplate::New(Callback_A));

?????????????????? JSObjTempl->Set(String::New("method_b"), FunctionTemplate::New(Callback_B));

?

??????????????????

回調(diào)函數(shù):(1)(當(dāng)前調(diào)用)JS對(duì)象:

??????????????????????????? Local<Object> self = AccessorInfo.Holder()/Arguments.Holder();

?????????????????? ?(2)(包裝后)外部對(duì)象:

??????????????????????????? Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));

?????????????????? ?(3)C++對(duì)象??????????????????????

??????????????????????????? CPPObj* p = static_cast<CPPObj*>(wrap->Value())

**********************************C++調(diào)JS**************************************

??????????????????

C++調(diào)JS函數(shù):運(yùn)行時(shí)環(huán)境查找JS函數(shù),并調(diào)用

總結(jié)

以上是生活随笔為你收集整理的v8学习笔记(八) 【JS与C++互调】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。