关于JNA调用dll的一些坑
char* 类型
有两种情况:
1、作为文本输入(只读)传参给dll的 函数;2、同时存在输入输出(读写)
只读时,直接将string类型传入即可;
读写时,需要指定空白的内存空间,具体在java的表现形式为:
byte[] outData = new byte[2048];//2048是内存空间大小,需要根据实际情况指定,如果返回的文本超过指定的内存大小,会崩溃?
...//此处调用dll函数
String outStr = Native.toString(outData,"gbk");
例:
对外提供的接口函数:
n 初始化函数:
int INIT(char * pErrMsg)
参数说明:
pErrMsg:动态库初始化错误信息。
功能描述:
检查整个运行环境:包括网络环境、运行所需文件、参数等的检查
本地临时文件的清除,比如获取照片信息交易所生成的本地jpg文件。
返回值: 成功:返回0 ; 失败:返回 -1
n 交易函数:
int BUSINESS_HANDLE( char* inputData,
char* outputData)
功能描述:HIS系统开发商需要向医保中心发送业务请求的通用函数
输入参数:inputData
输出参数:outputData char*
返回值:成功:返回0 ; 失败:返回 <0
输入输出参数是以“^、$、|”分割的字符串
初始化函数:public static void init(){ //INIT函数,参数是一个char*类型的可读写参数,需要用byte[]类型 byte[] outData = new byte[2048]; int code = IYBDll.dll.INIT(outData); String result = Native.toString(outData,"gbk"); }
已有1条评论