记录一次node调用dll的坑

首先,node调用动态库需要使用node-ffi模块,其次就是各个dll接口的数据对应问题,最常用的有int,long ,bool,String,还有一些ref.refType()引用的类型,暂时没用到,有需要的可以自己找一下

我是从参考c#调用dll实现node调用的,首先c#对其中一个方法的引入是这样的

 [DllImport("MsprintsdkRM.dll", EntryPoint = "PrintString", CharSet = CharSet.Ansi)]
 public static extern unsafe int PrintString(StringBuilder strData);

看完后,果断的使用sting替换了stringbuilder,node中的实现是这样的

const ffi = require('ffi-napi')

const path = require('path')

let dllPath = path.resolve('dll/print')

const dll = ffi.Library(dllPath + '/MsprintsdkRM.dll', {

 PrintString: ['int', ['String']],

});

调用时这样的:

dll.PrintString(“测试打印测试打印”);

然后进行了测试,发现打印出来的文字竟然是乱码的,经过度娘和大佬们的帮助才知道:

默认node.js是utf8字符串,而我们的dll很多都是gbk编码,从参数的传入需要转成gbk
 转码一般用这个模块,纯js版本 (中文 传入参数需要转码成gbk ,传出参数需要转码成utf8)

能怎么样呢,改吧
var   iconv  =  require ( 'iconv-lite' );

dll.PrintString(iconv.encode(“测试打印测试打印”,'GBK'));

然后就可以了

此博客仅用于自己错误记录,也希望帮助到和我一样困惑的小伙伴

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值