如何在nodejs中调用C# dll

news/2024/12/22 22:19:14/

Edge.js

GitHub
NPM package

环境要求

1.支持Node.Js 14.x, 16.x, 18.x, 19.x
2.支持 .NET Core 1.0.1 - 6.x - Windows/Linux/macOS

nodejs中调用C# dll

下载并安装 .NET 6.0 SDK

npm install edge-js

C#中的代码:
注意事项:

  1. 方法必须用async异步修饰,且返回值必须为Task < object >
  2. 不能用静态方法,且方法需要为public
using HDEC.CS.Geometry;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;namespace HDEC.CS   //命名空间
{public class CSGeometryReader  //类名{//方法名public async Task<object> GetCSMesh(string byteArrayJson) {try{var geo = Newtonsoft.Json.JsonConvert.DeserializeObject<byte[]>(byteArrayJson);var mesh = CSGeometry.Deserialize(geo, typeof(CSMesh));return  Newtonsoft.Json.JsonConvert.SerializeObject(mesh);}catch(Exception e){return e.Message + e.StackTrace;}}}
}

nodejs中的代码:
C#源码编译成dll后就可以在nodejs中使用
DLL文件的路径注意事项:

  1. 如果用相对路径,dll必须和js文件放在一个目录下
  2. 用绝对路径,dll和js文件可以不在一个目录下
process.env.EDGE_USE_CORECLR = 1 //这行不加会报错const sqlite3 = require("sqlite3")
const edge = require('edge-js')main()async function main () {const dbPath = './new-ss.db'const csDb = new sqlite3.Database(dbPath);const queryElements = "SELECT Id, Geometry FROM CDElement WHERE IsDeleted = 0"const dbElements = await queryDbElements(csDb, queryElements)console.log(dbElements)
}async function queryDbElements (db, sql) {return new Promise((resolve) => {const readGeom = edge.func({assemblyFile: 'CSGeometryReader.dll', // DLL文件的路径typeName: 'HDEC.CS.CSGeometryReader', // 命名空间.类名methodName: 'GetCSMesh' // 方法名});const result = []db.all(sql, [], (_err, rows) => {if (rows == undefined) {resolve(undefined)} else {for (const row of rows) {const arrByte = Array.from(row.Geometry)const input = JSON.stringify(arrByte)readGeom(input, (error, res) => {const geom = JSON.parse(res.toString())const id = row.Idif (error) {throw error}result.push({ id, geom })});}resolve(result)}})})
}

http://www.ppmy.cn/news/78483.html

相关文章

Windows编程开发中的语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows编程开发中的语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖。 首先你要明白一点&#xff1a; 逻辑覆盖率&#xff1a;语句覆盖<条件覆盖<判定覆盖<条件-判…

【Linux进阶之路】yum与vim操作

文章目录 前言一.yum——Linux的应用商店介绍基本使用① yum源②安装数据传输软件1.将Linux的文件传输到Windows平台上2.将Windows的文件传到Linux系统上 ③删除数据传输软件⑥查看安装包版本⑤练习安装与卸载小火车安装与卸载牛会说话 二.vim —— 一款优雅的编辑器①基本模式…

硅谷新王登国会山,呼吁加强 AI 监管;马斯克任命推特新 CEO;数字媒体巨头申请破产;欧盟通过全球首个全面监管加密资产框架 | 经济学人第 21 周

1. 硅谷新王登国会山&#xff0c;呼吁加强 AI 监管 Sam Altman, the chief executive of OpenAI, the firm behind the ChatGPT chatbot, called for tighter regulation of rapidly developing generative artificial intelligence, such as by forcing disclosure on images …

手把手教你用Python编写配置脚本引擎(福利篇)

版权声明&#xff1a;原创不易&#xff0c;本文禁止抄袭、转载需附上链接&#xff0c;侵权必究&#xff01; 目录 一、配置信息写入二、读取配置信息三、修改配置信息四、配置引擎总结五、作者Info 一、配置信息写入 配置信息初始化 定义配置引擎类和初始化方法&#xff0c;其…

Yet another ProblemHint 1

You are given an array aa of nn integers a1,a2,a3,…,an. You have to answer qq independent queries, each consisting of two integers ll and rr. Consider the subarray a[l:r]a[l:r] [al,al1,…,ar][al,al1,…,ar]. You can apply the following operation to the …

【医学图像】图像分割系列.2 (diffusion)

介绍几篇使用diffusion来实现医学图像分割的论文&#xff1a;DARL&#xff08;ICLR2023&#xff09;&#xff0c;MedSegDiff&#xff08;MIDL2023&#xff09;& MedSegDiff-V2&#xff08;arXiv2023&#xff09;&#xff0c;ImgX-DiffSeg&#xff08;arXiv2023&#xff09;…

try语句异常处理

文章目录 try语句异常的所有基类try语句的标准语法实战代码 try语句 ​ 使用try语句主要是为了进行异常的捕捉处理&#xff0c;异常在python也有几个基类 异常的所有基类 异常名称描述BaseException所有异常的基类SystemExit解释器请求退出KeyboardInterrupt用户中断执行Exc…

QT多线程(主动挂起线程)

文章目录 前言一、线程的挂起态二、QWaitCondition三、示例代码总结 前言 本篇文章来讲解一下QT中如何主动挂起线程&#xff0c;在不想让一个线程运行的时候我们应该如何让线程挂起呢&#xff1f;我们都知道使用sleep函数可以让线程挂起一段时间&#xff0c;但是一段时间过后线…