使用Dependency Walker验证DLL中的C函数

时间:2012-01-04 23:24:28

标签: java windows dll java-native-interface dependency-walker

我是依赖walker的新手,我正在尝试确定我的dll是否包含一个C函数,我试图通过JNI从Java调用。当我在Dependency Walker中选择应该包含C函数的dll时,我得到了导入和导出函数。导入列表具有setLogLevel函数,但入口点未绑定(与此列表中的所有函数一样),并显示带有c的绿色框。导出列表具有setLogLevel函数,并具有0x00003C25作为入口点。当我尝试从JAVA / JNI调用setLogLevel时,我得到以下内容。我不确定进口/出口是否正确,有人可以确认吗?

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.test.jni.SampleJNI.setLogLevel(I)V
            at com.test.jni.SampleJNI.setLogLevel(Native Method)
            at com.test.jni.Sample.setLogLevel(Unknown Source)
            at com.test.jni.Example.setLogLevel(Unknown Source)
            at com.test.jni.Example.main(Unknown Source) 

2 个答案:

答案 0 :(得分:0)

您的C函数名称不正确。该名称必须以Java为前缀,并包含包和类名。在您的情况下,它应该是Java_com_test_jni_SampleJNI_setLogLevel

答案 1 :(得分:0)

我省略了具有jdk的jni.h和jni_md.h头文件的java目录,这些文件来自CFLAGS(编译)包含在Makefile中。一旦我将它们添加到Makefile中,我就可以通过JNI方法调用从java到c进行通信。