高分请教关于JNI的问题。解决一定送上(500分)! 同时带有一个DLL文件,一个对应的.H文件,一个.LIB文件,这都是动态库一起带有的。我现在很着急,希望哪位高手能指点一下,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用JNI规范写一个dll(叫做A吧),Java的代码可以使用A实现的函数;而A是用C语言实现的,可以调用你那个原先有的DLL。具体看一下JNI的规范吧。 呵呵,在SUN的文档上看到的,帮你一把。Step 1: Write the Java Codeclass HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); }} Step 2: Compile the Java Codejavac HelloWorld.java Step 3: Create the .h FileC:\> javah -jni HelloWorld这是你得到的 .h文件,可以不看。不过要知道:JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);你将要调用的函数接口,有命名规则的。/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloWorld */#ifndef _Included_HelloWorld#define _Included_HelloWorld#ifdef __cplusplusextern "C" {#endif/* * Class: HelloWorld * Method: displayHelloWorld * Signature: ()V */JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif Step 4: Write the Native Method Implementation#include <jni.h>#include "HelloWorld.h"#include <stdio.h>JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return;} Step 4: Write the Native Method Implementation #include <jni.h>#include "HelloWorld.h"#include <stdio.h>JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return;} Step 5: Create a Shared Library cl -Ic:\java\include -Ic:\java\include\win32 -LD HelloWorldImp.c -Fehello.dll呵呵,兄弟,差不多了,要是.DLL文件高不定,你用VC搞一下吧 呵呵,兄弟,我大部分已经解决了,现在有一个很头疼的问题就是:在C环境下的输出正常,但是到了JAVA环境下却是乱码,我已经用了:sError = (*env)->NewStringUTF(env,sErrorReason);if (sError == NULL ){return slError}return sError;在C环境下输出sErrorReason显示正常,转换后到JAVA下输出sError就不正常了,请高手指点! 求一个实现方案 java 通信问题 servlet问题 在webwork的action中获取到附件地址,怎么在页面打开和打印? 在struts中关于选择框select的一个问题 谁知道webwork的文章那里有? csv 读取 我的jndi有问题,谁能帮我看看 请问ejb_jar.xml文件在那里写?jb6 eclipse安装groovy插件后报:groovy:compiler mismatch project level is :2.5 workspace lev 我想学struts,但页面上的链接错误怎么没人管? 【求助】J2EE普通客户端访问错误,求助!
Step 1: Write the Java Code
class HelloWorld {
public native void displayHelloWorld(); static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
不过要知道:
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);
你将要调用的函数接口,有命名规则的。/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif
#include "HelloWorld.h"
#include <stdio.h>JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
-LD HelloWorldImp.c -Fehello.dll呵呵,兄弟,差不多了,要是.DLL文件高不定,你用VC搞一下吧
if (sError == NULL ){
return slError
}
return sError;在C环境下输出sErrorReason显示正常,转换后到JAVA下输出sError就不正常了,请高手指点!