本文学习自http://chnic.iteye.com/blog/198745
Java端:
1.新建java工程HelloWorld
2.右击src新建class
包名:com.chnic.jni
类名:SayHellotoCPP
3.贴上如下代码
package com.chnic.jni;
public class SayHelloToCpp {
public native void sayHello(String name);
public static void main(String args[]){
SayHelloToCpp shp = new SayHelloToCpp();
shp.sayHello("ZCC");
}
}
4.进入工程目录下,打开CMD,调用javah -jni com.chnic.jni.SayHellotoCPP
如果找不到javah这个命令,可以将jdk下bin设为环境变量
运行结束后会在当前目录下生成com_chnic_jni_SayHellotoCPP.h
C++端:
1.打开VS——新建Win32项目——选择DLL,空项目——完成Win32Project1
2.将com_chnic_jni_SayHellotoCPP.h移入工程
3.建立com_chnic_jni_SayHellotoCPP.cpp
4.贴上如下代码
#include <iostream>
#include "com_chnic_jni_SayHellotoCPP.h"
using namespace std;
JNIEXPORT void JNICALL Java_com_chnic_jni_SayHellotoCPP_sayHello
(JNIEnv* env, jobject obj, jstring name)
{
const char* pname = env->GetStringUTFChars(name, NULL);
cout << "Hello, " << pname << endl;
}
5.属性——C/C++——附加包含目录——添加%java_home%\include;
6.将%JAVA_HOME%\include\win32下的jni_md.h放入工程路径
7.F7编译后可在Debug目录下发现Win32Project1.dll
Java调用C++
1.将Debug放到环境变量path下
2.修改java代码如下
package com.chnic.jni;
static{
System.loadLibrary("Win32Project1");
}
public class SayHelloToCpp {
public native void sayHello(String name);
public static void main(String args[]){
SayHelloToCpp shp = new SayHelloToCpp();
shp.sayHello("ZCC");
}
}
3.运行代码
即可看到Console输出Hello,ZCC
etc.如果出现Can't load IA 32-bit .dll on a AMD 64-bit platform这个错误,回到vs,将Win32改为X64即可,修改方法参照http://blog.sina.com.cn/s/blog_6e0693f70100t6ip.html