语言混编之java调用c dll jni技术小试
2010-01-12 10:46
183 查看
刚从网上看到c和java混编的文章,就亟不可待的尝试了一下。呵呵,效果还是很好的。下面将自己成果粘贴出来
(转载于http://www.zxbc.cn/html/20070518/19986.html)。实验之后可以通过。
1java中调用c语言
首先编写Main.java
public class Main
{
public native static int getStrNum(byte str[], int strLen);
}
在命令行中,使用如下命令编译:
javac Main.java
下面的命令将生成Main.h头文件
javah Main
打开vs2008, 新建工程MakeDll(win32 console application),设置项目属性如下:
在project-》MakeDll Properties-》在General选项卡上,选择生成dll文件。
同时需要在项目的c++下general下的Additional include directory下加载jdk安装目录下的include文件夹和该文件夹下的win32
子目录。
将第一步生成的Main.h文件假如到工程中,同时新建一个main.cpp文件,在其中假如如下代码:
#include "Main.h"
#include <string.h>
JNIEXPORT jint JNICALL Java_Main_getStrNum (JNIEnv *env, jclass cls, jbyteArray str, jint strLen)
{
jbyte *buffer = (*env).GetByteArrayElements(str, 0);
buffer[strLen] = ' ';
jint len = strlen((char*)buffer);
return len;
}
编译即可生成MakeDll.dll文件。
在java源文件中调用该dll文件(注意需要将dll文件和编译的class文件放置在同一个文件夹下面)
java源文件代码如下:
public class Main
{
static
{
System.loadLibrary ("MakeDll");
}
public native static int getStrNum (byte[] str, int strLen);
public static void main (String[] args)
{
Main instance = new Main ();
String str = new String ("haha");
int num = instance.getStrNum (str.getBytes (), str.length ());
System.out.println (num);
}
}
编译该java源文件,同时执行该文件。
javac Main.java
java Main
即可输出相应结果。
(转载于http://www.zxbc.cn/html/20070518/19986.html)。实验之后可以通过。
1java中调用c语言
首先编写Main.java
public class Main
{
public native static int getStrNum(byte str[], int strLen);
}
在命令行中,使用如下命令编译:
javac Main.java
下面的命令将生成Main.h头文件
javah Main
打开vs2008, 新建工程MakeDll(win32 console application),设置项目属性如下:
在project-》MakeDll Properties-》在General选项卡上,选择生成dll文件。
同时需要在项目的c++下general下的Additional include directory下加载jdk安装目录下的include文件夹和该文件夹下的win32
子目录。
将第一步生成的Main.h文件假如到工程中,同时新建一个main.cpp文件,在其中假如如下代码:
#include "Main.h"
#include <string.h>
JNIEXPORT jint JNICALL Java_Main_getStrNum (JNIEnv *env, jclass cls, jbyteArray str, jint strLen)
{
jbyte *buffer = (*env).GetByteArrayElements(str, 0);
buffer[strLen] = ' ';
jint len = strlen((char*)buffer);
return len;
}
编译即可生成MakeDll.dll文件。
在java源文件中调用该dll文件(注意需要将dll文件和编译的class文件放置在同一个文件夹下面)
java源文件代码如下:
public class Main
{
static
{
System.loadLibrary ("MakeDll");
}
public native static int getStrNum (byte[] str, int strLen);
public static void main (String[] args)
{
Main instance = new Main ();
String str = new String ("haha");
int num = instance.getStrNum (str.getBytes (), str.length ());
System.out.println (num);
}
}
编译该java源文件,同时执行该文件。
javac Main.java
java Main
即可输出相应结果。
相关文章推荐
- 语言混编之java调用c dll jni技术小试
- 语言混编之c调用java
- 语言混编之c调用java
- 使用java语言,利用多线程调用WebService进行数据处理
- C#调用exe解决PDF转图片问题(使用PDFBox方案,java语言编译jar包实现)
- Java语言与C语言混合编程(2)--在Java中调用C语言本地库
- java语言利用Socket实现对操作系统的命令调用和文件传输
- C++ 跨语言调用 Java
- golang与java间的json-rpc跨语言调用
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
- 关于NDK的配置以及第一个应用程序(android中java语言调用c/c++)
- 巧用C#做中间语言 实现Java调用.net DLL的方法
- JAVA通过JNI调用本地C语言方法
- 动态调用动态语言之Java脚本APIs(转)
- httpfetch http重试策略-一款java语言编写优雅的http接口调用组件
- Android学习JNI,使用C调用JAVA语言
- 通用权限管理系统多语言开发接口 - java,php 调用接口程序,多业务子系统集成
- Java中调用c/c++语言出现Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/String;)V...错误
- 动态调用动态语言之Java脚本API(理论+实践)1
- Atitit。Js调用后台语言 java c# php swing android swt的方法大总结