Nodejs node-ffi 调用 DLL 变量类型的问题
Nodejs node-ffi 调用 DLL 变量类型的问题
electron app 有一个 DLL 库 方法是这样定义的
SMART_EXPORTS bool getCameraFrameRGB(int handle, unsigned char *pdata, int *height, int *width, int channels, int type);
其中的第二个参数 unsigned char *pdata
不太清楚用什么方式去调用
尝试过好几种方案 都有问题
要么调用结束后获取到值为 0 要么控制台崩溃
let VEncode = new ffi.Library(dllFilePath, {
getCameraFrameRGB: [
ref.types.bool,
[
ref.types.int,
ref.refType(ref.types.uchar),
'int *',
'int *',
ref.types.int, ref.types.int
]
], // 获取图片数据
})
当然是看文档呀。
我猜测是传一个 buffer 进去。
另外,提问时请给出完整文档和你自己写的代码。只给这一点片段并不足以解决问题。
#2 好的 我整理一下
#1 我查过文档 但是没找到解决方案
我把代码整理了一下 https://github.com/yh4922/dlltest
我说的是你调用的 DLL 的文档,还是说并没有文档?
#5 这个不是么 https://github.com/yh4922/dlltest/blob/master/resources/ve/ffmpegthread_c.h
DLL 只有 4 个方法 都写在里面了
#7 没有给文档我 长度的话要求是图片[宽高3]
看了下你的代码,pdata 的类型设置成 ref.refType(‘uchar’),width 和 height 的类型设置成 ref.refType(ref.types.int)。
imgBuf 应该不需要设置 type 。
在Node.js中使用node-ffi
调用DLL时,处理变量类型确实是一个关键问题。node-ffi
允许你加载和使用动态链接库(DLL)中的函数,但它需要你正确地指定函数的参数和返回类型。
以下是一个基本的示例,展示了如何使用node-ffi
调用DLL函数,并处理不同的变量类型:
const ffi = require('ffi');
const ref = require('ref');
// 定义DLL文件的路径
const dllPath = './path/to/your.dll';
// 加载DLL
const myLibrary = ffi.Library(dllPath, {
'intAdd': ['int', ['int', 'int']], // 定义一个返回int,接受两个int参数的函数
'doubleMultiply': ['double', ['double', 'double']], // 定义一个返回double,接受两个double参数的函数
'getString': ['string', []] // 定义一个返回字符串,不接受参数的函数
});
// 调用函数
const resultInt = myLibrary.intAdd(5, 3);
const resultDouble = myLibrary.doubleMultiply(2.5, 4.0);
const resultString = myLibrary.getString();
console.log('intAdd result:', resultInt);
console.log('doubleMultiply result:', resultDouble);
console.log('getString result:', resultString);
在这个示例中,我们定义了三个函数:intAdd
、doubleMultiply
和getString
,它们分别返回整数、双精度浮点数和字符串。我们使用ffi.Library
来加载DLL,并指定每个函数的返回类型和参数类型。
注意,你需要根据你的DLL中的实际函数签名来调整这些类型定义。此外,对于更复杂的类型(如结构体),你可能需要使用ref-struct
等额外的库来定义和处理。