前段探针NWJS走了一些弯路,但最终也算是达到了预研目的。
本想利用nw js开发一个桌面应用,但是这个应用又需要比较多的硬件控制能力,这就要利用Addon插件来保证nw与前后端Front-End双向交互通畅。
nwjs通过JavaScript同步调用c++的过程,利用nodejs官网docs介绍的例子就可以保证能够使用;但,对于c++异步回调JavaScript,nodejs官网docs上没有明显例子,后来才发现在Github上Nodejs源码中有异步回调的例子,路径在:"node/test/addons/async-hello-world" 。
网上大多数搜到nodejs C++异步回调JavaScript的例子都比较老旧,这也是这篇博客的主要目的。找异步回调例子可以在源码中直接找,不必费周折看网上一些过时的信息,所以,我这里也不列出任何的代码和例子,只指明地方和路径。
虽然用正向和反向调用的例子可以集成出来这个AddOn的骨架,后面走的最大一段弯路是在编译的时候。
因为是一步一步尝试的关系,首先保证了在nodejs的情况下能够编译使用,但后来按照NWJS官网编译说明,虽然可以编译过Addon,但在异步回调的关键步骤persistent<function>.reset赋值时,nwjs却崩溃。试了很多野路子,也开了issue咨询nwjs的维护开发人员,后来才逐渐发现,虽同是编译相同代码的AddOn,但在nodejs和nwjs编译Addon时用到的头文件和依赖链接node.Lib等是大大不同的,nwjs是通过比较大量的hack chromium V8和nodejs,所以,链接库的不同是必然,在nodejs下能使用AddOn,但在nwjs下会崩溃,算是入坑后爬了坑出来。
补充一下:《Linker And Loader》这本书不错,会明白编码之后的程序故事。