社区
C++ Builder
帖子详情
如何编写供JAVA调用的动态链接库DLL
大伟
2007-04-11 06:43:14
要求输入字符串类型
...全文
384
4
打赏
收藏
如何编写供JAVA调用的动态链接库DLL
要求输入字符串类型
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
大伟
2007-05-23
打赏
举报
回复
问题已经解决了
具体步骤如下:
1. 由JAVA程序员生成一个.h文件
2.用这个文件来做动态链接库
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_easycode_print_ComPrint */
#ifndef _Included_com_easycode_print_ComPrint
#define _Included_com_easycode_print_ComPrint
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_easycode_print_ComPrint
* Method: print
* Signature: (I[B[B[B[B[B[B[B[B[B[B)I
*/
JNIEXPORT jint JNICALL Java_com_easycode_print_ComPrint_print
(JNIEnv *, jclass, jint, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray);
#ifdef __cplusplus
}
#endif
#endif
.cpp
//功能:将Java的byte数组转换为C char *;
char * jbyteArrayToChar(JNIEnv * env, jbyteArray bytes)
{
char * rtn = NULL;
jsize len = env->GetArrayLength(bytes);
jbyte * arrayBody = env->GetByteArrayElements(bytes,0);
if(len > 0)
{
rtn = new char[len+1];//(char *)malloc(len+1);
memcpy(rtn, arrayBody, len);
rtn[len]=0;
}
env->ReleaseByteArrayElements(bytes, arrayBody, 0);
return rtn;
}
//---------------------------------------------------------------------------
JNIEXPORT jint JNICALL Java_com_easycode_print_ComPrint_print
(JNIEnv *env, jclass obj, jint gwid,
jbyteArray Txt0, jbyteArray Txt1, jbyteArray Txt2, jbyteArray Txt3, jbyteArray Txt4,
jbyteArray Txt5, jbyteArray Txt6, jbyteArray Txt7, jbyteArray Txt8, jbyteArray Txt9)
{
char *Txt[10];
Txt[0] = jbyteArrayToChar(env, Txt0); Txt[1] = jbyteArrayToChar(env, Txt1);
Txt[2] = jbyteArrayToChar(env, Txt2); Txt[3] = jbyteArrayToChar(env, Txt3);
Txt[4] = jbyteArrayToChar(env, Txt4); Txt[5] = jbyteArrayToChar(env, Txt5);
Txt[6] = jbyteArrayToChar(env, Txt6); Txt[7] = jbyteArrayToChar(env, Txt7);
Txt[8] = jbyteArrayToChar(env, Txt8); Txt[9] = jbyteArrayToChar(env, Txt9);
return 0;
}
rainfall19831109
2007-04-11
打赏
举报
回复
至于谈到变量类型,那是没问题的
只要使用Windows标准的类型就没问题了
其实想下也知道,如果不行的话,那么Window的API怎么可以供那么多程序调用呢?
只要类型和类型的长度匹配,就没问题的了...
大伟
2007-04-11
打赏
举报
回复
这个好像不行的因为变量的类型都不一样
rainfall19831109
2007-04-11
打赏
举报
回复
标准的Windows Dll 我不清楚Java是否能调用,但这样已经是做成供其他程序\语言调用DLL的办法了
新建DLL工程,里面编写各函数,注明各函数标识,例如:
extern "C" __declspec(dllexport) void __stdcall FunctionForJava(/*参数列表*/);
Java
调用
动态链接库
(
Java
调用
DLL
)
Java
调用
动态链接库
Java
调用
DLL
源码
java
调用
动态链接库
dll
动态链接库
的唯一功能就是使用
Java
能够理解的C 代码来
调用
目标原生函数。 这个没什么实际用途的
动态链接库
的
编写
过程令人沮丧。同时
编写
Java
和C 代码使开 发难度大大增加。 因此,在
Java
开发社区中,人们一直都视...
JAVA
调用
动态链接库
DLL
之JNative学习源码
JAVA
调用
动态链接库
DLL
之JNative学习源码,详细请参考:http://blog.csdn.net/testcs_dn/article/details/26980027
JNI--
java
调用
不同平台的
动态链接库
,
dll
,so,完美,全教程
我们知道,使用 JNI
调用
.
dll
/.so 共享类库是非常非常麻烦和痛苦...使用 JNA ,不需要再
编写
适配用的 .
dll
/.so ,只需要在
Java
中
编写
一个接口和一些代码,作为 .
dll
/.so 的代理,就可以在
Java
程序中
调用
dll
/so 。
java
调用
动态链接库
java
调用
动态链接库
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章