求救!关于JNI 可能DLL不在系统路径下那么你把该DLL放到与JAVA文件在一个目录下看看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以确定dll已经被装入了,,,然后呢?还有其他的可能么?注意错误信息。谢谢。 有两个地方要注意:1. 方法的导出,在VC(你是使用vc开发dll吗)工程中的*.def文件中加入你的方法导出。像我的是这样的:; NativeCode.def : Declares the module parameters for the DLL.LIBRARY "NativeCode"DESCRIPTION 'NativeCode Windows Dynamic Link Library'EXPORTS ; Explicit exports can go hereJava_edp_storageagent_StorageManager_initialize @1~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2 如果你的dll使支持mfc的,请在每个java native function中加入一段如JNIEXPORT void JNICALL Java_edp_storageagent_StorageManager_initialize (JNIEnv *env, jclass o,jint maxThreadNum){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ your code;}如果还是不行,请将你的dll拷贝到和你的class同一个目录,再运行 我也是,命令行执行没有问题,但是jbuilder就不行了,是不是有什么相关设置 如果是命令行能执行,而jbuilder不能的话。请检查你的path环境,看你的dll在不在这些路径中 ///////头文件#ifdef __cplusplusextern "C" {#endifJNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);#ifdef __cplusplus}#endif///////////////////////////////cpp文件#include "HelloWorld.h"JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *, jobject){ MessageBox(0, "test", "", MB_OK); return;}用dependency显示导出的函数名是_Java_HelloWorld_displayHelloWorld@8如果使用.def文件EXPORTS Java_HelloWorld_displayHelloWorld @1导出的函数名就变成了Java_HelloWorld_displayHelloWorld但是执行都报出同样的错误。谁还有高见!!! 我发现了testjni.HelloWorld.displayHelloWorld是不是你的类是属于testjni包的那你应该在testjni目录的上层目录运行javahjavah -jni tetestjni.HelloWorld这样应该在testjni目录的上层目录有个头文件tetestjni_HelloWorld.h里面的声明是#ifdef __cplusplusextern "C" {#endifJNIEXPORT void JNICALL Java_testjni_HelloWorld_displayHelloWorld (JNIEnv *, jobject);#ifdef __cplusplus}#endif javac 将JTable用对象流写入文件? 怎么下载旧版本的JDK? 给点建议 jni中如何将C中的一个struct返回到java 问一个计算器布局的问题 如何判断一个字符串里的数字是整数还是小数 Eclipse In Action Sample 各位java的兄弟 请推荐一下一台专门用来开发java程序的电脑的配置!!! 简单问题 Java中实现远程方法调用的一些理解 jb 中popup menu 如何使用??
然后呢?还有其他的可能么?注意错误信息。
谢谢。
1. 方法的导出,在VC(你是使用vc开发dll吗)工程中的*.def文件中加入
你的方法导出。
像我的是这样的:
; NativeCode.def : Declares the module parameters for the DLL.LIBRARY "NativeCode"
DESCRIPTION 'NativeCode Windows Dynamic Link Library'EXPORTS
; Explicit exports can go hereJava_edp_storageagent_StorageManager_initialize @1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2 如果你的dll使支持mfc的,请在每个java native function中加入一段
如
JNIEXPORT void JNICALL Java_edp_storageagent_StorageManager_initialize
(JNIEnv *env, jclass o,jint maxThreadNum)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
your code;
}如果还是不行,请将你的dll拷贝到和你的class同一个目录,再运行
请检查你的path环境,看你的dll在不在这些路径中
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif///////////////////////////////cpp文件#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *, jobject)
{
MessageBox(0, "test", "", MB_OK);
return;
}用dependency显示导出的函数名是
_Java_HelloWorld_displayHelloWorld@8
如果使用.def文件
EXPORTS Java_HelloWorld_displayHelloWorld @1
导出的函数名就变成了Java_HelloWorld_displayHelloWorld但是执行都报出同样的错误。谁还有高见!!!
testjni.HelloWorld.displayHelloWorld
是不是你的类是属于testjni包的
那你应该在testjni目录的上层目录运行javah
javah -jni tetestjni.HelloWorld
这样应该在testjni目录的上层目录有个头文件
tetestjni_HelloWorld.h
里面的声明是
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_testjni_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif