Aur*_*urA 16 c++ node.js node-ffi
我正在尝试node-ffi库来调用cpp代码.
CPP代码
typedef struct{
char * key,
char * value
} ContextAttribute;
typedef struct{
ContextAttribute * attribute,
int count
} Context;
Run Code Online (Sandbox Code Playgroud)
这用于
Status Init(
Handle* handle,
const char* id,
const char* token,
const char* apiKey,
const char* productname,
const char* productVersion,
const char* productLanguage,
PlatformType platform,
const char* userGuid,
EventCb eventcb,
Context * context
);
Run Code Online (Sandbox Code Playgroud)
我通过以下node-ffi javascript代码使用上面的cpp 代码
var ref = require('ref');
var ffi = require('ffi');
var Struct = require('ref-struct');
var ContextAttribute = new Struct({
key: "string",
value: "string"
});
var Context = new Struct({
attribute: ref.refType(ContextAttribute),
count: "int"
});
'Init': [Status, [
ref.refType(voidPtr),
'string',
'string',
'string',
'string',
'string',
'string',
PlatformType,
'string',
EventCb,
ref.refType(Context)
]],
Run Code Online (Sandbox Code Playgroud)
该函数被称为under
this.Init(clientId, token, apiKey, productName, productVersion, productLanguage, platform, userGuid, Event, wrapAsNative(callback), Context)
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用这个测试
var context = [{
attribute: [{
key: 'os',
value: 'win'
}],
count: 0
}];
var result = Lib.Init("myClient", testToken, '4d84247c36bd4f63977853eb1e0cb5b7', "asfasd",'12','en_US', 'MAC', 'abcd+1@pqr.com', 'SIGNIN', function(Handle, Event){
}, context);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError:错误设置参数10 - writePointer:在Object的Object.writePointer(/Users/..../node_modules/ref/lib/ref.js:742:11)的TypeError(本机)处期望作为第三个参数的缓冲区实例.在Object.alloc上设置(/Users/.../node_modules/ffi/ref/lib/ref.js:484:13)(/Users /.../node_modules/ffi/lib/ref.js:516:13 )在Object.Lib.Init的Object.proxy [as Init](/Users/.../node_modules/ffi/lib/_foreign_function.js:50:22)处(/Users /.../src/Lib.js) :130:26)
var context = [{
attribute: [{
key: 'os',
value: 'win'
}],
count: 0
}];
Run Code Online (Sandbox Code Playgroud)
这不是创建Buffer
具有布局的有效对象的方式Context
。您必须使用它var context = new Context;
来创建类型正确的对象。
这正是错误消息告诉您的内容 -context
不是有效的Buffer
.
不确定,但我认为也不ref
支持 C 风格数组,因此指针 + 计数结构不能像那样工作。如果您想使用它们,则必须在 C 端执行此操作,并将数组视为不透明的指针类型。
(实际上并非如此,这是可能的。但它需要摆弄原始实例的get
和方法上的 offset 参数。)set
Buffer
不过,链接列表确实有效。
归档时间: |
|
查看次数: |
611 次 |
最近记录: |