Java 如何使用JNA获取静态最终变量

Java 如何使用JNA获取静态最终变量,java,jna,glew,Java,Jna,Glew,我正在使用GLEW库glew32.dll(从GLEW网站标准下载),并尝试加载变量GLEW_OK。这个变量是在glew.h文件中定义的(作为0的uint),因此我假设它将包含在glew32.dll文件中。但是,当我使用Java JNA代码时: NativeLibrary glew = NativeLibrary.getInstance("glew.dll"); Pointer p = glew.getGlobalVariableAddress("GLEW_OK"); System.out.pri

我正在使用GLEW库glew32.dll(从GLEW网站标准下载),并尝试加载变量GLEW_OK。这个变量是在glew.h文件中定义的(作为0的uint),因此我假设它将包含在glew32.dll文件中。但是,当我使用Java JNA代码时:

NativeLibrary glew = NativeLibrary.getInstance("glew.dll");
Pointer p = glew.getGlobalVariableAddress("GLEW_OK");
System.out.println(p.getInt(0));
线程“main”java.lang.UnsatifiedLinkError中出现异常错误:查找“GLEW_OK”时出错:找不到指定的过程

at com.sun.jna.NativeLibrary.getGlobalVariableAddress(NativeLibrary.java:587)
at mcclean.opengl.glew.GLEWUtils.init(GLEWUtils.java:22)

库加载正常,但似乎找不到静态变量。为什么没有加载静态变量?

查看头文件
glew.h
glew\u OK

/*错误代码*/
#定义GLEW_OK 0
这是一个预处理器定义。这不是您在Java世界中想象的“静态最终变量”。在编译C++项目时,预处理器<代码>定义了基本上由预处理器“复制”到代码中。这意味着
if(val==GLEW\u OK)
被字面上改为
if(val==0)

由于预处理器只是替换文本,因此没有关于源自
.dll
文件中定义的值的名称或来源的信息

您需要手动查找值。您可以通过从
include/GL/glew.h
文件下载二进制文件并导航到该文件来完成此操作。在此之后,您可以为Java中的常量创建一个类:

GlewConstants类{
公共静态最终int GLEW_OK=0;
// ...
}