最近写一个东西,界面基于electron,需要使用一些底层功能,所以将底层功能写成addon供electron调用。本人喜欢用vs开发,因为有些复杂的工程用node-gyp这种配置比较麻烦,所以研究了下vs写的addon。
首先确定electron的node版本:electron版本列表
然后确定该node使用的napi版本:node使用的napi版本
只要lib中napi的版本对上了就行了。其实如果不是electron而是node来调用,那么用vs写一个dll,链接到对应版本的node.lib,然后配置里将后缀名改成.node,是可以直接require这个dll的,所以从本质说.node就是一个dll。
但是如果换成electron就不行了,想了很久找到了原因。用depends查看生成的addon的话,会发现addon导入的还是node.dll,而electron是将node集成在内部的,而不是额外load这个node.dll,可以发现这些napi是在electron导出的:
所以说electron在LoadLibrary这个addon时,找不到node.dll,也就无法完成函数导入。那么思路就明确了