java也是可以调用其他语言的(比如c,c++,c#,php之类的),比如说通过webservice技术。
另外,刚刚我折腾了一下JNI(Java Native Interface的缩写),用java调用本地的dll文件(好处,可以借助c调用系统底层函数之类。坏处:不能跨平台了)。
本人环境windows7(64位) jdk7(64位) Eclipse(64位) 。
以前搞c也是用vc6(古老的神器了)。由于各种原因后来也就没怎么搞了。
这次主要是用codeblocks+mingw,途中遇到各种蛋疼问题:
1.首先下载codeblocks和mingw:
codeblocks好说,我下载了个免安装版的。mingw用在线安装也是可以很容易安装。然而codeblocks自带的mingw不能编译出64位的dll。
于是去下载mingw64,问题来了不知道是不是网络问题一直安装不了。
好在搜索好久找到了个离线安装包
mingw64的https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.8.2/threads-posix/seh/x86_64-4.8.2-release-posix-seh-rt_v3-rev4.7z/download
和
MSYS的http://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/
下载好后,把他们解压到同一个mingw64文件夹好了。
然后配置
注意了,这个坑爹,他不会扫描子目录,所以子目录也要加上去。
2.用Eclipse做个helloworld
public class TestJni { static { System.loadLibrary("memorycatc"); } public static native void say(); public static void main(String[] args) { TestJni.say(); } }然后选中项目,按alt+shift+w,然后用explorer打开,
先按着shift键再鼠标空白的地方,菜单就会多出【在此处打开命令窗口】
用命令行生成.h头文件。
然后,把刚才生成的TestJni.h的文件内容复制粘贴到main.h里,再然后把main.cpp改成如上图所示。
注意了,函数声明不需要参数名,但函数的实现需要写上参数名。我这里自己加了 env和jo。
随便找个工具,看看导出函数正不正确,Java_Test***类似这样的就可以了,但是如果前面还有一些_Z64什么的符号就不对了。
把刚才生成的dll复制到项目跟路径。然后就是运行测试了:
最后输出结果:
MemoryCat.com says helloworld1