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 动态构造路径。
  • 根据运行环境查找对应的路径
相关推荐
遇见你...2 小时前
TypeScript
前端·javascript·typescript
Highcharts.js2 小时前
Highcharts Grid 中文站正式上线:表格数据处理的全新选择
前端·javascript·数据库·表格数据·highcharts·可视化图表·企业级图表
懂懂tty5 小时前
CRA 迁移 Rspack(实战)
前端·架构
小码哥_常7 小时前
Kotlin 助力 Android 启动“大提速”
前端
GreenTea7 小时前
AI 时代,工程师的不可替代性在哪里
前端·人工智能·后端
Jagger_7 小时前
能不能别再弄低代码害人了
前端
朦胧之7 小时前
AI 编程开发思维
前端·后端·ai编程
踩着两条虫8 小时前
VTJ:快速开始
前端·低代码·架构
木斯佳9 小时前
前端八股文面经大全:携程前端一面(2026-04-17)·面经深度解析
前端·状态模式
Java后端的Ai之路9 小时前
LangChain ReAct Agent 核心技术问答
前端·react.js·langchain