我现在有个功能需要调用dll。那位帮忙写一段代码好吗,在线等
其实功能很简单,我有一个已存在的sendrcv.dll,但不支持java直接调用
所以我就写了一个C++程序编译成支持java的sendrcv2java.dll
只有一个函数: String sendrcv(String in,String out)
java代码如下:public class MedicalInsurance {
public MedicalInsurance() {
super();
} static {
System.loadLibrary("SendRcv2Java"); // 载入SendRcv.dll的动态连接
}
public static native int SendRcv(String msg,String retmsg);
}C++代码如下:(VC6.0)
#include "StdAfx.h"
#include "MedicalInsurance.h"JNIEXPORT jstring JNICALL Java_MedicalInsurance_SendRcv
(JNIEnv * env, jclass obj, jstring in, jstring out){
const char *inputData = env->GetStringUTFChars(in, 0); char * outputDat = new char[1000];
char miwen[1000];
typedef char(__stdcall *FUN)(const char* inputData,char* outputDat);
HINSTANCE hDLL;
FUN SendRcv;
hDLL=LoadLibrary("C:\\WINDOWS\\system32\\SendRcv.dll");//加载动态链接库文件;
SendRcv=(FUN)GetProcAddress(hDLL,"SendRcv");
char re=SendRcv(inputData,outputDat);
jstring result = env->newStringUTF(env,re);
strcpy(miwen,outputDat);
env->ReleaseStringUTFChars(out, miwen);
FreeLibrary(hDLL);//卸载.dll文件;
delete [] outputDat;
return result;
}红字的地方是有疑问处。主要是jstring类型不知道怎么处理。
那位帮忙指点一下啊
其实功能很简单,我有一个已存在的sendrcv.dll,但不支持java直接调用
所以我就写了一个C++程序编译成支持java的sendrcv2java.dll
只有一个函数: String sendrcv(String in,String out)
java代码如下:public class MedicalInsurance {
public MedicalInsurance() {
super();
} static {
System.loadLibrary("SendRcv2Java"); // 载入SendRcv.dll的动态连接
}
public static native int SendRcv(String msg,String retmsg);
}C++代码如下:(VC6.0)
#include "StdAfx.h"
#include "MedicalInsurance.h"JNIEXPORT jstring JNICALL Java_MedicalInsurance_SendRcv
(JNIEnv * env, jclass obj, jstring in, jstring out){
const char *inputData = env->GetStringUTFChars(in, 0); char * outputDat = new char[1000];
char miwen[1000];
typedef char(__stdcall *FUN)(const char* inputData,char* outputDat);
HINSTANCE hDLL;
FUN SendRcv;
hDLL=LoadLibrary("C:\\WINDOWS\\system32\\SendRcv.dll");//加载动态链接库文件;
SendRcv=(FUN)GetProcAddress(hDLL,"SendRcv");
char re=SendRcv(inputData,outputDat);
jstring result = env->newStringUTF(env,re);
strcpy(miwen,outputDat);
env->ReleaseStringUTFChars(out, miwen);
FreeLibrary(hDLL);//卸载.dll文件;
delete [] outputDat;
return result;
}红字的地方是有疑问处。主要是jstring类型不知道怎么处理。
那位帮忙指点一下啊
解决方案 »
- httpclient问题
- 高手给就是一下 一句代码的意思 在线等
- getvalueisadjusting
- 关于一个 学习java的‘坦克游戏’网站
- 请问大家都是去哪里下载java的一些扩展包的啊?
- UP有分!!!!!!!JSWDK、JWSDP、J2EESDK三者什么关系啊,学一个JSP怎么就这么难啊?
- poi操作word中的表格,我想写信息到word中的表格中我的代码如下,出错了。
- 小弟我想入java的门,请大家指点指点
- 关于socket.setSoTimeout()的问题,请进,请进……
- 一个关于Visual Age For Java 3.0简体中文企业版 帮助的简单问题,100分轻松拿到!!
- java的正规表达式中如何让点表示点字符,而不是任意一个字符?
- 将图片加载到控件上之后图片显示不居中,请求帮助!
楼主【divxpaly】截止到2008-06-24 14:12:22的历史汇总数据(不包括此帖):
发帖数:0 发帖分:0
结贴数:0 结贴分:0
未结数:0 未结分:0
结贴率:-------------------结分率:-------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
如果能不用写c代码就能调用dll的话就更好了。
(JNIEnv * env, jclass obj, jstring in, jstring out){
const char *inputData = env->GetStringUTFChars(in, 0);
char * outputDat = new char[1000];
char miwen[1000];
typedef int (__stdcall *FUN)(const char* inputData,char* outputDat);
HINSTANCE hDLL;
FUN SendRcv;
hDLL=LoadLibrary("C:\\WINDOWS\\system32\\SendRcv.dll");//加载动态链接库文件;
SendRcv=(FUN)GetProcAddress(hDLL,"SendRcv");
int result=SendRcv(inputData,outputDat);
strcpy(miwen,outputDat);
env->ReleaseStringUTFChars(out, miwen);
FreeLibrary(hDLL);//卸载.dll文件;
delete [] outputDat;
return result;
}
但我需要返回的不是jint,而是jstring。
typedef int (__stdcall *FUN)(const char* inputData,char* outputDat); 1。首先要确定你的函数原型是哪个,似乎返回的都只是数字或char,如果这样的话,就没必要返回jstring了。
你需要返回的数据应该是 jstring out? 还是什么啊?2。如果要返回jstring 可以env->newStringUTF(env, char*);或者其他newStringUTF重载方法3。或者可以使用https://jna.dev.java.net/
JNA可以不写C代码就可以采访本地DLL 我没试过。。