首页 > 后端开发 > 正文

如何在C++中嵌入JAVA程序

2024-04-17 23:10:00 | 我爱编程网

如何在C++中嵌入JAVA程序很多朋友对这方面很关心,我爱编程网整理了相关文章,供大家参考,一起来看一下吧!

本文目录一览:

如何在C++中嵌入JAVA程序

如何在C++中嵌入JAVA程序

C/C++代码如何嵌入JAVA

Java Native Inte***C++e(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现。

1.标准的java类库没有提供应用程序所需要的功能,通常这些功能是平台相关的

2. 希望使用一些已经有的类库或者应用程序,而并非用java语言编写的

3. 程序的某些部分对速度要求比较苛刻,选择用汇编或者c语言来实现并在java语言中调用

(1)编写HelloWorld程序,由于涉及到要编写c/c++代*因此会在开发中使用Microsoft VC++工具。编写java代*,在硬盘上建立一个hello目录作为的工作目录,首先需要编写自己的java代*,在java代*中会声明native方法,代*非常简单。如下所示

displayHelloWorld()方法的声明,有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为要用c/c++语言实现它。注意System.loadLibrary("hello")这句代*,在静态初始化块中定义的,系统用来装载hello共享库,这就是在后面生成的hello.dll(如果在其的*作系统可能是的形式,比如hello.so)

(2)编译java代*

javac HelloWorld.java生成HelloWorld.class文件

(3)创建.h文件

这一步中要使用javah命令生成.h文件,这个文件要在后面的c/c++代*中用到,运行

javah HelloWorld。这样可以看到在相同目录下生成了一个HelloWorld.h文件,文件内容如下

(4) 编写本地实现代*

在这部分要用C/C++语言实现java中定义的方法,在VC++中新建一个Project,然后创建一个HelloWorldImp.cpp文件,内容如下

这里include了 jni.h和刚才得到的HelloWorld.h文件。因此要在VC++里面设置好,jni.h在JAVA_HOME/include里面。编译通过后再生成hello.dll文件。

(5)运行java程序

把上面生成的hello.dll文件复制到工作目录,这时候目录中包括HelloWorld.java,HelloWorld.class和hello.dll文件。运行java HelloWorld命令,则可在控制台看到Hello world|的输出了。

Linux下测试jni

1、在测试用户下建立src、lib目录

2、进入src目录编写HelloWorld.java

3、然后javac HelloWorld.java

4、使用 javah 工具生成 HelloWorld.h 文件

javah HelloWorld

5、编写HelloWorld.c

#include ;

#include "HelloWorld.h"

#include ;

JNIEXPORT void JNICALL

Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)

{ printf("Hello world!/n");

return;

}

6、编译c的动态库

gcc -shared -o $HOME/lib/libhello.so HelloWorld.c

注意$HOME/lib目录要加入到环境变量LD_LIBRARY_PATH中去

7、java HelloWorld运行程序

如何在C++中嵌入JAVA程序

请教VC中要实习如图Java中的功能该怎么写,求代码!

你这是要做什么功能?至于这么麻烦么?

Java匹配替换代码,

这个String.replace就好了;也可以匹配正则表达式;

看完你写这个,感觉太乱了,不知道你要表达啥一次想要怎么样的结果就你那个

str=395654545;你是要去重复?我爱编程网

让我看着咋跟md5加密算法那些代码有点像啊

如何在C++中嵌入JAVA程序

如何用VC编写供JAVA调用的DLL

}(2)编译该java文件,再编译生成头文件(供vc使用)javac GB2PY.java //编译生成class(3)在当前文件夹下创建 com/bw/gb2py 文件夹,将GB2PY.class放入该文件夹,回到当前文件夹,调用javah命令生成头文件。javah com.bw.gb2py.GB2PY //生成头文件,文件名为com_bw_gb2py_GB2PY.h注意头文件中的内容不能更改,否则生成的dll不能使用(4)在VC中新建名为GB2PY的Win32 dll工程,将com_bw_gb2py_GB2PY.h拷贝到工程目录下,并加入工程。再拷贝%JAVA_HOME%/include/jni.h 和 %JAVA_HOME%/include/win32/jni_md.h 到工程目录下,并加入工程。(5)实现com_bw_gb2py_GB2PY.h中声明的方法:Java_com_bw_gb2py_GB2PY_GetPY。注意java string和c中char的转换。java的string都用unicode编码(双字节),而char是单字节的。int (*GetPY)(char* szGBString,PY &oPY);JNIEXPORT jstring JNICALL Java_com_bw_gb2py_GB2PY_GetPY

(JNIEnv * env, jclass, jstring name){static HMODULE hModle = LoadLibrary("PYconvert.dll"); //第三方dll

GetPY = (LPFUN)GetProcAddress(hModle,"GBToPY");int len;char charName[128];

char charPY[512];

len = env->GetStringLength(name) * 2 + 1; //双字节长度转为单字节长度,加1是为了加结束符

memset(charName, 0, len);

const wchar_t * w_buffer = env->GetStringChars(name, 0);

int wlen = wcslen(w_buffer);

len = WideCharToMultiByte(CP_ACP, 0, w_buffer, wcslen(w_buffer) + 1, charName, len, NULL, NULL);

env->ReleaseStringChars(name, w_buffer);//以上代码将java string name中的内容拷贝到了char数组charName中... //省略部分功能代码,通过调用第三方的dll函数将汉字转换为拼音,存储在charPY数组中 int slen = strlen(charPY);

jchar * buffer = new jchar[slen];

len = MultiByteToWideChar(CP_ACP, 0, charPY, strlen(charPY), buffer, slen);

if (len > 0 && len < slen)

buffer[len] = 0;//以上代码将char型字符串转换为jchar型字符串 jstring js = env->NewString(buffer, len);

delete [] buffer;return js;}(6)编译生成dll文件,在java中就可以调用了(要用到第二步生成的类)!:)

以上就是我爱编程网为大家带来的如何在C++中嵌入JAVA程序,希望能帮助到大家!
与“如何在C++中嵌入JAVA程序”相关推荐