先用vc写个.dll在里面封装调用函数
在你得java app里
System.Loadlibrary("youdllfile.dll");public native void yourFunction();ok;
可以用了
在你得java app里
System.Loadlibrary("youdllfile.dll");public native void yourFunction();ok;
可以用了
调试欢乐多
你的代码不全,是不是看到"java编程思想"中的一段,但你只写了java这一部分,还有c++部分的函数重整也即"MsgImpl"部分,是个dll文件。及头文件。具体你可看"java编程思想"中有一模一样的例子。头文件是由javah -jni <file>命令产生的。
你的class 似乎还要个public,这是java中的规定,pulbic与文件名同,我不知道jb是不是也要这样?我正在研究这个,相互讨论。
附所有源代码:
showmessage.java:
public class ShowMessage {
private native void ShowMessage(String msg);
static {
System.loadLibrary("MsgImpl");
}
public static void main(String[] args) {
ShowMessage app = new ShowMessage();
app.ShowMessage("Generated with JNI");
}
} MsgImpl.cpp
#include <jni.h>
#include <stdio.h>
#include "ShowMessage.h"
extern "C" JNIEXPORT void JNICALL
Java_ShowMessage_ShowMessage(JNIEnv* env,
jobject, jstring jMsg) {
const char* msg=env->GetStringUTFChars(jMsg,0);
printf("Thinking in Java, JNI: %s\n", msg);
env->ReleaseStringUTFChars(jMsg, msg);
} 头文件ShowMessage.h是javah自动生成的,也附在下面
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class ShowMessage */ #ifndef _Included_ShowMessage
#define _Included_ShowMessage
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: ShowMessage
* Method: ShowMessage
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_ShowMessage_ShowMessage
(JNIEnv *, jobject, jstring); #ifdef __cplusplus
}
#endif
#endif
.jni :java native interface
是java代码与非代码交互的接口,更多的在jdk的文档中有很详细的说明,而且是中文的 2.不会"c"没关系,可使用相关的工具进行交互
www.stryon.com.cn中的r-jax就是这样一个工具,
还有ibm的BridgeToJava,JCom等工具
1.jdk文档下载处,里面jni的规范说明。总共32M左右(arbow你可到这下载了:))
http://java.sun.com/webapps/download/Redirect/8185595/5847479377282807053505607246086069333228071972022813600060132859339008063305596058473206-3865/j2sdk-1_4_1-doc.zip 2.r-jax下载(注必须要jdk1.1.6以上),你不能下载是要注册一个身份,你任意注册一个就行了。www.stryon.com.cn上有rjax的中文简介说明。
http://www.stryon.com/rjax/downloads/rJAX_2.4.2_P1.exe 3.bridge2java 在ibm的alphaWorks这个开发网站上,Robocode也在这个网站上
http://www.alphaworks.ibm.com,你搜索一下,一定给找到的。具体的我就不找了