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#中的代码:
注意事项:
- 方法必须用async异步修饰,且返回值必须为Task < object >
- 不能用静态方法,且方法需要为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文件的路径注意事项:
- 如果用相对路径,dll必须和js文件放在一个目录下
- 用绝对路径,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)}})})
}