electron、edge.js调用C#动态链接库的一些问题

Edge.js 是一个开源的互操作桥梁 ,它允许开发者在同一个进程中让 Node.js 和 .NET 代码一起运行。electron-edge-js在这个基础上对electron进行了适配,使得可以在electron中调用C#动态链路库。

1.安装electron-edge-js

复制代码
npm install electron-edge-js

2.调用示例

需要注意的是dll在打包后文件路径会发生变化需要进行

typescript 复制代码
/**
 * 调用 .NET DLL 中的方法
 * @param methodName - 方法名
 * @param params - 传递给 .NET 方法的参数(须可 JSON 序列化)
 * @param options - 可选配置:typeName,customSearchPaths(自定义 DLL 搜索路径)
 */
export async function callDotNetMethod(
  methodName: string,
  params?: any,
  options?: {
    typeName?: string;
    customSearchPaths?: string[];
  }
): Promise<any> {
  // 1. 定位 DLL
  const { dll, root } = locateDll(options?.customSearchPaths);
  process.env.DOTNET_ROOT = root;
  ensureEnvironment();
  // 2. 获取或创建方法代理
  const cacheKey = `${dll}|${options?.typeName || ''}|${methodName}`;
  let func = methodCache.get(cacheKey);
  if (!func) {
    func = edge.func({
      assemblyFile: dll,
      typeName: options?.typeName || '',
      methodName: methodName.trim(),
    });
    methodCache.set(cacheKey, func);
  }

  // 3. 执行调用
  return new Promise((resolve, reject) => {
    func(params, (error: any, result: any) => {
      if (error) {
        reject(error);
      } else {
        resolve(result);
      }
    });
  });
}

3.dll定位

  • 在打包后(例如使用 electron-builder 或 electron-forge),DLL 会被复制到 resources 目录下,因此需要根据 process.resourcesPath 动态构造路径。
  • 根据运行环境查找对应的路径
相关推荐
咩咩啃树皮3 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny3 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹3 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
阳光是sunny3 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
小林ixn4 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker4 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
এ慕ོ冬℘゜5 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
武子康5 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
一点一木6 小时前
从60首歌到1个网站:输入你的故事,还你一首歌
前端·github
IT_陈寒7 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端