我想为本地库(使用 BridJ)编写一个 Java 包装器。我要包装的方法需要一个操作结构(回调):
typedef struct _operations {
int (*op1) (int, ...);
int (*op2) (float, ...);
} operations;
int method(*operations ops);
这些操作显然应该用 Java 编写,因此method
回调 Java 空间(使用 BridJ 的回调机制)。
但是,在执行 Java 回调并返回后method
,C 代码中的局部变量发生了变化:
int method(*operations ops) {
void* uselesspointer;
DbgPrint("useless pointer before callback is %d\n", uselesspointer);
// prints x
// execute callbacks in Java here
DbgPrint("useless pointer after callback is %d\n", uselesspointer);
// prints something different from x
}
我怎样才能防止这种情况发生?
//详见https://github.com/Maxhy/dokany/issues/7
//有趣的编辑:无用指针的偏移量似乎是恒定的,在我的应用程序中,第二条调试消息始终是“192”而不是“0”