如何在nodejs中调用C# dll

这篇具有很好参考价值的文章主要介绍了如何在nodejs中调用C# dll。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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文件的路径注意事项:文章来源地址https://www.toymoban.com/news/detail-458004.html

  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.Id

            if (error) {
              throw error
            }

            result.push({ id, geom })
          });
        }
        resolve(result)
      }
    })
  })
}

到了这里,关于如何在nodejs中调用C# dll的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#调用C++ dll异常排查

    最近在做的一款程序,长时间运行总会出现莫名的问题。有时是自动关闭,有时程序报错,有时调用的dll异常…… 由于开始与C++组合作时,使用其提供的dll出现过数据读写时异常(内存操作异常),于是怀疑他们提供的dll有内存泄漏。于是想通过日志或其它方法来确认这个猜

    2024年01月21日
    浏览(55)
  • C++调用C# dll成功示例

    一.准备C# dll类库 。生成CSLib.dll  二、写C++应用调用  1)需要把dll复制到运行目录下。(不然会提示找不到dll System.IO.FileNotFoundException:“未能加载文件或程序集“CSLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件) 2)设置\\\"公共语言运

    2024年02月14日
    浏览(61)
  • C# DLL嵌套调用时修改生效

    C# DLL嵌套调用时,需要以被修改的DLL作为最下层,从下往上地重新生成所有DLL才可生效。 DLL1(最下层)代码: DLL2(中间层)代码: 应用程序代码: 实验步骤: 1.在代码无修改的情况下运行应用程序,输出结果为A。 2.修改DLL1动态链接库ConsoleWriteLineSomething方法,使其输出

    2024年01月25日
    浏览(64)
  • 【C#-1】C#调用matlab生成的dll库

    matlab打包dll 1、matlab示例程序: 2、输入deploytool打包matlab程序,具体如下:  3、拷贝 打包成功后,将生成for_redistribution_files_only文件夹中的dll文件拷贝到C#程序lib文件夹下,若没有,新创建一个。 错误解决: 解决方法:将matlab程序改写成一个方法。 C#调用dll 1、添加引用  

    2024年02月07日
    浏览(36)
  • C# 运用(codeDom和反射技术)动态编译dll ,动态调用

          在软件运用工程中,往往会根据各种各样,花样百出的需求来设计软件,在最近的项目中无意中,我就遇到了一个需求,据说是,客户要动态编译dll ,我“滴个乖乖”,这是要逆天啊! 话不多说,直接来点干货。 简单分享一下个小demo: 1.运用codeDom技术实现动态程序集

    2024年02月13日
    浏览(39)
  • LabVIEW于C#各自生成的DLL互相调用的方法

    1.LV调用C#生成的DLL (1)C#类库代码原型 Debug生成的DLL: LV代码: 结果显示 2.C#调用LabVIEW生成的DLL: LV源码 VS2017添加LV生成的DLL 加入命名控件,加源码 运行结果:

    2024年02月16日
    浏览(64)
  • Unity——在C#中调用C++动态链接库(DLL)

    1、新建C++空项目 打开VS,新建一个C++空项目,自命名项目名称与位置。 2、配置项目属性为动态链接库 右键项目,点击属性,打开项目属性页,将常规中的配置类型改为动态库(.dll)。  3、添加.h头文件 右键头文件,点击添加—新建项,选择头文件.h,命名为DllForUnity.h,点击

    2024年02月10日
    浏览(46)
  • 前端(node.js)调用dll动态链接库

    使用 js node 调用dll 动态链接库. github地址如下,包含dll,里面就一个Add方法暴露出来 github Windows 11 22H2 node v16.20.0 Python 3.11.2 需要安装这俩库 ffi-napi app.js 第一种不好使,曲线救国的方式这个是。 python-shell app.js python

    2024年02月16日
    浏览(46)
  • C#调用C++封装的SDK库(dll动态库)——下

    一、说明 上一篇我们相当于封装的是C语言风格的动态dll库,供C#来调用的。 C#调用C++封装的SDK库(dll动态库)——上 如果我们要封装的是下面的类呢?我们该怎么办?大家先思考下。  二、思路 不知道大家还记得设计模式中的单例模式吗? 我们可以采用类似的处理方式,通过

    2023年04月25日
    浏览(44)
  • 使用Rider C# Dll工程和Unity工程互相调用、断点方法

    创建C# Dll工程,生成C#工程Dll 创建Unity工程 Unity调用C#工程的代码 C#工程调用Unity工程的代码 断点方法 创建工程 选这个,注意UnityEngineDll这个选项,要选你目标unity版本的Dll 生成Dll 右键工程 简单,能看到这篇文章的都是优秀的同学,所以,此步略过 下面这两个复制到unity工程

    2024年01月20日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包