node-ffi - 使用 node-ffi 读取字符指针数据时的空缓冲区
问题描述
DLL 文件是在 Delphi 中开发的。该功能描述如下:
函数名称:GetMsg
功能说明:用于获取错误信息。
函数原型:procedure GetMsg(ret: Integer; var Msg: PChar); 标准调用;
参数说明: ret:错误码。Msg:用于输出相应的错误信息。
首先,您需要分配内存。内存大于等于255。
根据描述,我知道Msg
参数是一个指针,然后我使用 node-ffi 来调用如下GetMsg
过程:
var ffi = require('ffi');
var ref = require('ref');
var TheLib = ffi.Library('TheLib.dll', {
GetMsg: ['void', ['int', ref.types.CString]]
});
const outNameBuffer = Buffer.alloc(255);
TheLib.GetMsg(-25, outNameBuffer);
console.log(outNameBuffer, ref.readCString(outNameBuffer));
请注意,我ctypes
在 Python 中使用,我可以获得与 value 对应的中文消息-25
。
对此有何建议?
解决方案
我遇到了同样的问题,试试我的解决方案:
var ffi = require('ffi');
var ref = require('ref');
var ArrayType = require('ref-array');
var charPtrArray = ArrayType('char *', 64);
var charPtrArrayPtr = ref.refType(charPtrArray);
var TheLib = ffi.Library('TheLib.dll', {
GetMsg: ['void', ['int', charPtrArrayPtr]
});
console.log(charPtrArrayPtr);
推荐阅读
- flutter - 颤振 - 如何在弹出窗口中创建表单
- docker - 从 Docker 运行 VNC
- java - 无法从另一个包中的超类实现受保护的接口
- ruby - 在文本框上保存文本和输出(Ruby Selenium/Webdriver)
- javascript - 如何在 onUpdate 函数中访问 Firestore 数据
- wechat - 需要明确定价在 Smooch 沙盒上的运作方式
- laravel - 如何在 Laravel 中返回 gziped API 响应?
- normal-distribution - 在伽马分布中应用 3 sigma 公式?
- django-viewflow - 一个视图流任务可以有多个下一个状态转换吗?
- google-cloud-platform - 如何使用 Airflow DataprocOperator 在 Google DataProc 集群上运行 shell 脚本