我现在有个功能需要调用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类型不知道怎么处理。
那位帮忙指点一下啊
解决方案 »
- 如何确保调用super.XXX()
- 关于toString() 的问题
- 字符串转成日期的问题,大家来帮忙啊!
- [求助]JAVA做桌面CS程序,跟数据库有数据交换!
- 读取文件,文件编码的问题
- 怎样设置JOptionPane.showMessageDialog弹出对话框中的字体??
- 请教:父类中若是定义构造函数为private,是不是在子类中均无法再重载或扩展?
- 有关Garbage Collector的问题
- 线程间通信测试,使用sleep()问题?为什么永远只能打出“Rose---->male",打不出“Rose--->female"
- 关于<textarea>字段提交后显示时的换行问题
- 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 我没试过。。