【发布时间】:2012-11-21 07:36:34
【问题描述】:
我正在尝试在 C++ 中执行回调(其中 C++ 作为 node.js 程序的一部分运行)。回调是到第 3 方库,当它有数据要传递时,它将调用回调。
我似乎遇到的问题是变量类型:
static void sensorEventCallback(const char *protocol, const char *model,
int id, int dataType, const char *value, int timestamp,
int callbackId, void *context)
{
//process the data here
}
Handle<Value> sensorEvents( const Arguments& args ) {
HandleScope scope;
...
callbackId = tdRegisterSensorEvent(
reinterpret_cast<TDSensorEvent>(&telldus_v8::sensorEventCallback),
Context::GetCurrent()->Global());
}
我得到的错误:
错误:无法将“v8::Local<:object>”转换为“void*”作为参数 ‘2’ to ‘int tdRegisterSensorEvent(void ()(const char, const char*, int, int, const char*, int, int, void*), void*)'
它似乎在与作为上下文的论点 2 作斗争。关于如何将 V8 对象转换为 tdRegisterSensorEvent 可以接受的对象有什么想法吗?
【问题讨论】:
-
看起来你需要传递对象的地址而不是对象本身。
-
@n.m.不应该提倡cargo cult programming(尤其是当 v8.h 是发布源时)。
Context::GetCurrent()->Global()返回一个Local<Context>... -
@HostileFork:我应该说“一个对象”而不是“对象”,对此我深表歉意。如果 C 函数需要
void*,您通常会向它传递一些对象的地址。我没有别的意思。