参考 从零开始实现Electron应用与C++应用交互

 

安装electron-rebuild

npm install --save-dev electron-rebuild

安装 nanomsg 

npm install --save nanomsg

运行报错 NODE_MODULE_VERSION 

npm run dev

需要升级到82对应的版本

(参考 nodejs升级的两种方法  这个没用下载不了n,直接去官网下载最新版本)

(参考 node以往的版本 根本找不到82版本的,最后我就安装了最新的83版本 v14.8.0,还是会报错只是报错里67变成了83而已,这里开始怀疑node版本号应该不是问题的关键)

 

参考 Node - was compiled against a different Node.js version using NODE_MODULE_VERSION 51

electron版本是10.0.0时,怎么都报错

(报错:'.' 不是内部或外部命令,也不是可运行的程序或批处理文件。所以加了双引号)

"./node_modules/.bin/electron-rebuild.cmd"

npm uninstall electron
npm install electron@4.2.12 --save-dev

将electron版本改为4.2.12后 重新执行

"./node_modules/.bin/electron-rebuild.cmd"

 

运行报错 process is not defined

npm run dev

参考  Webpack ReferenceError: process is not defined #871

参考 electron-vue报错:Webpack ReferenceError: process is not defined

方案一:删除 index.ejs里的这段代码(使用方案一后,还有其他报错,因此弃用方案一,我的electron版本是4.2.12)

使用方案二, webpack.renderer.config.js 和 webpack.web.config.js增加以下代码

templateParameters(compilation, assets, options) {
                return {
                    compilation: compilation,
                    webpack: compilation.getStats().toJson(),
                    webpackConfig: compilation.options,
                    htmlWebpackPlugin: {
                        files: assets,
                        options: options
                    },
                    process,
                };
            },

如果两者方案都不行,我看参考的网址里有评论说是这样说的

webPreferences: {
      nodeIntegration: true // 添加这一配置
    }

终于运行起来了

这个node 是10.11.0?奇怪,我不是才安装了14.8.0么?process.versions.node获取的和 node -v 的版本号不一样是正常的么?(啊!是electron4.2.12里集成的node版本)

js 代码

var nano = require('nanomsg')
var s = nano.socket('req')
//连接C++程序地址
s.connect('tcp://192.168.3.67:12345')
s.send('hello c')

c++测试工程 ConsoleApplication1.cpp

//#include <nanomsg/reqrep.h>
#include "nn.h"
#include "reqrep.h"
#pragma comment(lib,"nanomsg.lib")

using namespace std;

int main() {
	int s = nn_socket(AF_SP, NN_REP);
	int err = nn_errno();
	int rc = nn_bind(s, "tcp://0.0.0.0:12345");
	char buf[1000] = { 0 };
	for (;;) {
		printf("wait next \n");
		int rc = nn_recv(s, buf, 1000, 0);
		if (rc < 0) {
			printf("error: %s\n", nn_strerror(nn_errno()));
		}
		printf("%s\n", buf);
	}
	return 0;
}

编译nanomsg

由于新人一枚,网上资料也少,误以为是c++程序用的nanomsg是electron/nodumodule里的,后续c++程序一运行就崩溃。

于是选择自己去官网下载源码(https://github.com/nanomsg/nanomsg/releases),编译nanomsg

参考:VS2015编译生成nanomsg库文件

参考 : 四种环境下编译nanomsg库

 

 

 

 c++测试工程配置

项目右键-属性 -c/c++-常规-附加包含目录 (头文件所在路径)

 

将nanomsg编译出来的文件拷贝到测试工程里

 

项目右键-属性 -链接器-常规-附加包含目录 (lib所在路径)

 

项目右键-属性 -链接器-输入-附加依赖项 (lib文件名)

运行 (服务器和客户端的启动顺序可以不分先后)

以下是:先运行c++项目,运行electron-vue项目的结果

参考 【动手项目二】用nanomsg代替传统的TCP Socket是什么样的体验? 

Logo

前往低代码交流专区

更多推荐