Miniblink中JS和Cxx互动时的参数传递,对象和数组

2 篇文章 1 订阅
1 篇文章 0 订阅
    // CPP中实现的给JS调用的函数声明
    jsValue JS_CALL js_msgBox(jsExecState es);

    // 绑定函数
    jsBindFunction("msgBox", js_msgBox, 1);

    // CPP中实现留给Js调用的接口
    jsValue JS_CALL js_msgBox(jsExecState es)
    {
            jsValue jv = jsEmptyObject(es);
	    jsValue jOv1 = jsInt(12);
	    jsValue jOv2 = jsInt(2);
	    jsSet(es, jv, "name", jOv1);
	    jsSet(es, jv, "age", jOv2);
	    return jv;
    }

    // HTML中调用CPP中实现的函数
    <script type="text/javascript">
        function CallCPlusPlus() {
	        var obj = msgBox("");
	        var name = obj.name;
	        alert(name);
	        var age = obj.age;
	        alert(age);
        }
    </script>
	

    // CPP中实现留给Js调用的接口
    jsValue JS_CALL js_msgBox(jsExecState es)
    {
	    jsValue jsv = jsArg(es, 0);
	    jsSetAt(es, jsv, 0, jsInt(0));
	    jsSetAt(es, jsv, 1, jsInt(1));
	    return jsInt(1);
    }

    // HTML中调用CPP实现的函数
    <script type="text/javascript">
        function CallCPlusPlus() {
	    var arrayObj = new Array(); //创建一个数组
	    msgBox(arrayObj);
	    alert(arrayObj.length);
	    alert(arrayObj[0]);
	    alert(arrayObj[1]);
     </script>
	

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
miniblink是什么?Miniblink是一个追求极致小巧的浏览器内核项目,全世界第三大流行的浏览器内核控件。其基于chromium最新版内核,去除了chromium所有多余的部件,只保留最基本的排版引擎blinkMiniblink保持了10M左右的极简大小,是所有同类产品最小的体积,同支持windows xp、npapi。为什么要做miniblink?市面上作为嵌入的组件的可用的浏览器内核,不外乎这几个:webkit、cef、nwjs、electron。cef:优点是由于集成的chromium内核,所以对H5支持的很全,同因为使用的人也多,各种教程、示例,资源很多。但缺点很明显,太大了。最新的cef已经夸张到了100多M,还要带一堆的文件。同新的cef已经不支持xp了(chromium对应版本是M49)。而且由于是多进程架构,对资源的消耗也很夸张。如果只是想做个小软件,一坨文件需要带上、超大的安装包,显然不能忍受。nwjs,或者最近大火的electron:和cef内核类似,都是chromium内核。缺点和cef一模一样。优点是由于可以使用nodejs的资源,同又自带了各种api的绑定,所以可以用的周边资源非常丰富;而基于js的开发方案,使得前端很容易上手。所以最近N多项目都是基于nwjs或electron来实现。例如vscode,atom等等。原版webkit:现在官网还在更新windows port,但显然漫不在心,而且最新的webkit也很大了,超过20几M。最关键的是,周边资源很少,几乎没人再基于webkit来做开发。同由于windows版的saferi已经停止开发了,所以用webkit就用不了他的dev tools了。这是个大遗憾。WKE:这是个很老的webkit内核的裁剪版了。小是小,但bug太多了。那么关键点来了,使用miniblink有啥好处呢??首先,miniblink对大小要求非常严格。原版chromium、blink里对排版渲染没啥大用的如音视频全都被砍了,只专注于网页的排版和渲染。甚至为了裁剪大小,我不惜使用vc6的crt来跑mininblink(见我上篇文章)。这个也算前无古人后无来者了。其次,miniblink紧跟最新chromium,这意味着chromium相关的资源都可以利用。在未来的规划里,我是打算把electron的接口也加上的,这样可以无缝替换electron。使用miniblink的话,开发调试用原版electron,发布的候再替换掉那些dll,直接可以无缝切换,非常方便。miniblink如何使用?Miniblink导出了electron、WKE的接口,可以直接无缝替换现有的electron、WKE项目。早期miniblink还导出了CEF接口,不过现在已被废弃。miniblink有个小demo,从demo里可以看到,brackct这个基于cef的开源编辑器,已经顺利由miniblink跑起来了。现在electron的接口已做好,vscode跑起来了。更详细的使用文档见本页其他文章。miniblink如何裁剪到这么小?这个比较复杂了。主要就是把blink从chromium抽离了出来,同补上了cc层(硬件渲染层)。现在的blink,已经不是当年的那个webkit了,渲染部分全走cc层,复杂无比。我这大半年都在重写他那个蛋疼又复杂的cc层。和webkit比,miniblink架构有什么优势现在的webkit版本,已经比miniblink落后太多了。blink一直在加入各种极富创造力和想象力的功能、组件。例如,blink早就加入多线程解析html token、blink gc回收器、多线程录制回放渲染机制。这些能让blink的解析渲染速度极大提升。下一次,我会先开源出blink gc组件,这东西很有意思,在c 里硬是搞出了一个垃圾回收机制,能让你像写java一样写c 。
### 回答1: CMAKE_CXX_ARCHIVE_FINISH 是一个 CMake 变量,它可以用来在创建静态库指定一个命令,该命令会在静态库创建完成之后被执行。这个变量可以用来执行一些额外的操作,比如将静态库的输出转换成一个更适合的格式,或者为静态库添加一些元信息等。 例如,你可以在 CMakeLists.txt 这样使用这个变量: ``` set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_AR> rcs <TARGET> <LINK_FLAGS> <OBJECTS>") ``` 上面的命令会将创建的静态库转换成一个可重定向的静态库 (rs)。 ### 回答2: CMake是一款软件构建工具,用于自动生成项目构建文件。在CMakeLists.txt文件,CMAKE_CXX_ARCHIVE_FINISH是一个CMake变量,它指示CMake在创建静态库(archive)应该执行的步骤和命令。 静态库是一种包含可重用代码的归档文件,它可以在编译与应用程序一起链接以创建可执行文件。CMAKE_CXX_ARCHIVE_FINISH变量用于指定静态库创建完成后的最终操作。 默认情况下,CMAKE_CXX_ARCHIVE_FINISH被设置为一个空的命令。这意味着在创建静态库后,CMake不会执行其他的操作。但是,我们可以通过将CMAKE_CXX_ARCHIVE_FINISH设置为一个自定义的命令来扩展其功能。 例如,我们可以将CMAKE_CXX_ARCHIVE_FINISH设置为一个Shell命令,用于将静态库复制到特定的目录,或在静态库构建完成后生成一些附加的文档或报告。 在某些情况下,CMAKE_CXX_ARCHIVE_FINISH还可以用于执行一些后处理操作来优化静态库。例如,可以使用它来删除没有被引用的符号,从而减小最终的静态库文件大小。 总之,CMAKE_CXX_ARCHIVE_FINISH变量允许开发人员在创建静态库后执行自定义的操作,以实现更高级的构建过程和功能。 ### 回答3: 在CMakeList,CMAKE_CXX_ARCHIVE_FINISH是一个用于控制生成器在创建C++静态库的归档操作的选项。默认情况下,CMake使用ar命令来创建静态库,而CMAKE_CXX_ARCHIVE_FINISH则用于指定生成静态库之后是否执行一个额外的自定义命令。 在CMakeList,当设置了CMAKE_CXX_ARCHIVE_FINISH为true,CMake将会在生成静态库后执行一个指定的命令来完成额外的归档操作。这个命令可以是用户自定义的脚本或外部命令。 通过在CMAKE_CXX_ARCHIVE_FINISH指定自定义命令,可以实现一些特定的操作。例如,可以通过指定一个脚本来在生成静态库之后进行特定的文件操作,比如复制、移动或改名文件。另外,也可以在生成静态库后执行其他构建系统的命令,比如调用make install来安装静态库。 总的来说,CMAKE_CXX_ARCHIVE_FINISH的作用是允许我们在生成C++静态库后执行一些额外的操作,从而实现更灵活的构建过程。但需要注意的是,这个选项只在使用特定的生成器才会生效,所以在不同的构建系统和平台下可能会有不同的表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值