温馨提示:创建一个electron-vue脚手架工程,不懂的创建electron-vue脚手架工程的老铁,可参考我上一个写的博客(node搭建eletrcon-vue脚手架框架开发桌面端程序 链接:https://blog.csdn.net/qq1020654861/article/details/109294117

1.脚手架创建成功后,查看electron版本是否最新的,最新的版本我也不知道会出现什么样的问题,我采用的是electron:2.0.18

2.修改electron 32位 命令(:npm install --arch=ia32 electron)在此之前,请删掉当前node_modules依赖,删除后执行命令,然后在执行(cnpm install)

3.node_modules依赖下载成功后,导入到node_modules所需的FFI依赖,导入成功后在当前目录中建立一个DLL文件夹(DLL文件夹下放你的dll文件)

提示:FFI架包因上传不上去,需要的请留言 一对一发送

C++测试代码

test.h

class TESTDLL_API CtestDll {
public:
	CtestDll(void);
};
 
extern "C"
{
	TESTDLL_API int Double(int a);
}

test.cpp

// testDll.cpp : 定义 DLL 的导出函数。
//
 
#include "test.h"
 
// 这是导出函数的一个示例。
TESTDLL_API int Double(int a)
{
    return a*2;
}

electron调用DLL代码

'use strict';

const ffi = require('ffi');
const path = require('path');
const demo = ffi.Library(path.join(__dirname, '../../../../../../dll/dlltest.dll'), {
    "Double": ['int', ['int']]
});

4.调用DLL文件的JS写好后找到当前的项目的index.ejs文件中把JS导入进去 (如下图所示)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>my-project</title>
    <% if (htmlWebpackPlugin.options.nodeModules) { %>
      <!-- Add `node_modules/` to global paths so `require` works properly in development -->
      <script>
        require('module').globalPaths.push('<%= htmlWebpackPlugin.options.nodeModules.replace(/\\/g, '\\\\') %>')
      </script>
    <% } %>
  </head>
  <script type="text/javascript" src="../index.js"></script>
  <body>
    <div id="app"></div>
    <!-- Set `__static` path to static files in production -->
    <% if (!process.browser) { %>
      <script>
        if (process.env.NODE_ENV !== 'development') window.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
      </script>
    <% } %>

    <!-- webpack builds are automatically injected -->
  </body>
</html>

5.在vue面中的mounted页面初始化加载中调用DLL接口(如下图所示)  温馨提示:我DLL中的Double接口返回的是一个a*2 所以按道理来说我输入2 会返回给我一个4

6.运行程序 npm run dev 打开程序后会发现控制台中输出结果为(以下图所示)

7.大功告成 哦耶

错误提示:报Error: Dynamic Retrieval Win32error 126是(DLL路径没找到)

错误提示:报Error: Dynamic Symbol Retrieval Error: Win32 error 127 (生成的c++ dll有问题,没有导出,所以调用dll的时候找不到对应的方法)

报错 Error: Dynamic Linking Error: Win32 error 193 (dll错生成了86位的。改成64位即可)

需要demo项目路径:https://download.csdn.net/download/qq1020654861/21547731

Logo

前往低代码交流专区

更多推荐