在JNA中创建一个全局引用

时间:2013-04-18 06:08:58

标签: java c java-native-interface jna

我想使用的本机库有这样的方法:

extern unsigned long write(void);
然而,它需要在几个全局变量中定义:

short int Addr; //the starting address it write to;
short int Length; //the length of the writing;
void * data; //the data it will write;

我知道在JNA中,NativeLibray有加载本机库中定义的全局引用的方法,但它似乎不是它所需要的。我实际上需要声明上面的全局变量并写入它们,以便write()方法可以正常工作。

有关如何在JNA中实现此功能的任何建议?

感谢。

2 个答案:

答案 0 :(得分:1)

许多游戏黑客不愿意陷入肮脏的细节。

NativeLibrary提供对共享库导出的全局变量地址的访问。

NativeLibrary lib = NativeLibray.getInstance("mylib");
Pointer paddr = lib.getGlobalVariableAddress("Addr");
paddr.setInt(0, 1234);

答案 1 :(得分:0)

为什么不将“write”方法包装在另一个可以通过Java / JNA调用的方法中。在那里,你首先设置那些全局变量,然后调用真实变量。