使用内存分配传参的方式调用dll成功了,但是回调没执行?
发布于 5天前 作者 Einsy 95 次浏览 来自 问答

需要引用一个dll,列出了其中两个接口函数,是C的接口,其中部分头文件如下, typedef struct _LogInfo { char severip[16]; int severport; char severid[24]; char localip[16]; int localport; char username[24]; char password[64]; int keepalive; int timeout; int expires; }LogInfo;

typedef void (*Callback_Offline)( void *userdata );

int GBAPI NP_GB_Login( void* userdata, LogInfo &info, Callback_Offline callback ); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Nodejs代码如下: var ffi = require(‘…/…/’); var ref = require(‘ref’); var Struct = require(‘ref-struct’); //var hWnd = new Buffer(8); var int64_t = ref.types.int64; var voidptr = ref.refType(ref.types.void); var intptr = ref.refType(ref.types.int); var uint8_ptr = ref.refType(ref.types.uint8);

var SDKHandle = ffi.Library('./gbsdk-console’, { 'NP_GB_Init’: ['void’, []], 'NP_GB_Login’: ['int’, ['void’,_LogInfoPtr,voidptr]] });

var logInfo= new Buffer(164); logInfo.write("192.168.60.107\0\0",0,16); logInfo.writeInt32LE(5060,16); logInfo.write("15000000002000000001\0\0\0\0",20,24); logInfo.write("192.168.60.46\0\0",44,16); logInfo.writeInt32LE(81,60); logInfo.write("15000000004000000003\0\0\0\0",64,24); logInfo.write("123456\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",88,64); logInfo.writeInt32LE(60,152); logInfo.writeInt32LE(3,156); logInfo.writeInt32LE(3600,160); //这段结构体完全正确,下面运行正常!看起来似乎不用使用nodejs 的ref-struct模块的。

SDKHandle.NP_GB_Init();

var Callback_Offline=ffi.Callback('void’,[voidptr],function(userdata){ console.log(“userdata”); console.log(userdata); }); var N=SDKHandle.NP_GB_Login("null",logInfo,Callback_Offline); console.log(N);

请问:为什么回调没执行呢?请哪位大神帮下我,问了响马大侠,他也没精力搞清楚这个问题,请看到的大神帮下,万分感谢!

回到顶部