關於jsb中js與c 的相互呼叫

2021-09-06 11:55:51 字數 1323 閱讀 7832

1.js呼叫c++函式

在c++中宣告函式,名為functioncpp,通過spidermonkey中jsapi

的js_definefunction繫結乙個js函式,名為functionjs,此函式名

可在js中直接呼叫,並可以傳參,引數由functioncpp接收。

2.c++呼叫js函式

在js中宣告函式,名為functionjs,通過spidermonkey中jsapi的

js_callfunctoionname(也可用js_callfunction,但引數不一樣),

c++呼叫該函式,並傳入引數,引數由functionjs接收。

以上兩種方法皆可接收返回值。

示例**:

js中

var haha = testjs("js run hahhahaha");

if (haha) else

var testfunction = function (var1)

c++中

宣告函式

jsbool testjs(jscontext *cx, uint32_t argc, jsval *vp)

}cclog("js function");

return js_true;

}

呼叫:

ccscriptengineprotocol *pengine = scriptingcore::getinstance();

ccscriptenginemanager::sharedmanager()->setscriptengine(pengine);

scriptingcore::getinstance()->runscript("hello.js");

jscontext *cx = sc->getglobalcontext();

jsobject *obj = sc->getglobalobject();

js_definefunction(cx, obj, "testjs", testjs, 2, jsprop_readonly | jsprop_permanent);

jsval var1 = c_string_to_jsval(cx, "hahhahah");

jsval rval;

js_callfunctionname(cx, obj, "testfunction", 1, &var1, &rval);

jsstring* ps = js_valuetostring(scriptingcore::getinstance()->getglobalcontext(), rval);

cclog(pw.get().c_str());

lua與C 相互呼叫

新建乙個工程,將編譯出來的lua.lib包含進來,就可以開始用了 1 c 呼叫 lua 編寫 如下 include using namespace std pragma comment lib,lua.lib extern c void main int nret lual loadfile l,l...

C與C 之間相互呼叫

c與c 之間相互呼叫 1 匯出c函式以用於c或c 的專案 如果使用c語言編寫的dll,希望從中匯出函式給c或c 的模組訪問,則應使用 cplusplus 預處理器巨集確定正在編譯的語言。如果是從c 語言模組使用,則用c鏈結宣告這些函式。如果使用此技術並為dll提供標頭檔案,則這些函式可以原封不動地由...

C與C 之間相互呼叫

1 匯出c函式以用於c或c 的專案 如果使用c語言編寫的dll,希望從中匯出函式給c或c 的模組訪問,則應使用 cplusplus 預處理器巨集確定正在編譯的語言。如果是從c 語言模組使用,則用c鏈結宣告這些函式。如果使用此技術並為dll提供標頭檔案,則這些函式可以原封不動地由c和c 模組使用。以下...