1

我想为本地库(使用 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”

4

0 回答 0