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 动态构造路径。
  • 根据运行环境查找对应的路径
相关推荐
YIAN9 小时前
从 SSE 流式到结构化输出:LangChain 三大 OutputParser 与 ToolCall 方案全实战
前端·langchain·node.js
YIAN9 小时前
从 SSE 流式原理到 LangChain 结构化输出:打字机效果与 JSON 解析全方案实战
前端·langchain
Moment9 小时前
如果你在做 RAG,可能会需要 pdf-inspector
前端·后端·面试
gnip9 小时前
Flutter 原生插件开发实战指南
前端·flutter
晓得迷路了10 小时前
栗子前端技术周刊第 148 期 - Turborepo 2.11、Chrome 154 iframe、Node.js 26...
前端·javascript·css
IT_陈寒10 小时前
Vite热更新失效?你可能漏了这个配置项
前端·人工智能·后端
10年前端老司机10 小时前
Next.js+LangGraph.js+ 简历工具AI Agent完整落地
前端·langchain·agent
IT_陈寒15 小时前
Java中equals方法比了个寂寞?原来这才是正确的重写姿势
前端·人工智能·后端
默_笙15 小时前
🚓 分诊台与拆题术:让 RAG 学会判断和规划
前端·javascript
CopyCode15 小时前
用 AI 迁项目有多爽?我把 Webpack 迁 Vite 的全过程记下来了
前端·架构