社区
C++ Builder
帖子详情
如何编写供JAVA调用的动态链接库DLL
大伟
2007-04-11 06:43:14
要求输入字符串类型
...全文
392
4
打赏
收藏
如何编写供JAVA调用的动态链接库DLL
要求输入字符串类型
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
调用
动态链接库
(
DLL
)是
Java
编程中一个比较特殊的技术,主要涉及到
Java
与本地代码的交互。在Windows系统中,
DLL
(Dynamic Link Library)是实现函数复用的一种方式,它包含了一系列可
供
其他程序
调用
的函数或数据...
用
java
调用
C或C++
动态链接库
java
调用
dll
总结,
Java
通过JNI
调用
C或C++
动态链接库
的过程包括:
编写
Java
类、编译
Java
类、生成C/C++头文件、
编写
C/C++本地方法实现、编译C/C++代码为
DLL
,最后在
Java
程序中
调用
本地方法。这个过程使得
Java
能够利用C/C++的强大...
JAVA
调用
动态链接库
DLL
之JNative学习源码
`JNative` 是一个用于
Java
调用
本地代码(如
DLL
)的开源库,它提
供
了一个方便的接口,使得
Java
程序员可以轻松地与
动态链接库
进行交互。本教程将围绕如何使用`JNative`来
调用
DLL
进行深入讲解。 首先,我们要理解
Java
...
JNI--
java
调用
不同平台的
动态链接库
,
dll
,so,完美,全教程
我们知道,使用 JNI
调用
.
dll
/.so 共享类库是非常非常麻烦和痛苦...使用 JNA ,不需要再
编写
适配用的 .
dll
/.so ,只需要在
Java
中
编写
一个接口和一些代码,作为 .
dll
/.so 的代理,就可以在
Java
程序中
调用
dll
/so 。
java
调用
C语言
编写
的so库中的函数,
java
调用
C语言
编写
的
dll
库中的函数
本文将深入探讨这两种方法,以及如何在
Java
中
调用
C语言
编写
的SO(Linux下的
动态链接库
)和
DLL
(Windows下的
动态链接库
)中的函数。 首先,JNI是
Java
官方提
供
的原生接口,允许
Java
代码直接与本地代码交互。在
Java
中...
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章