请教:JNI调用dll问题

chao226 2009-04-26 12:31:52
要用java 调用别人提供的一个dll动态链接库BaraingApplyV2.dll中的一个函数int Init(const char * Data1,char * retMsg,char* Data2),我在网上查了好多关于jni方面的资料,发现其中最重要的就是要用c++写一个中间DLL,在这个中间dll中再去调用BaraingApplyV2.dll中的函数
我没学过c++,所以想请教大家:c++中怎么去调用BaraingApplyV2.dll中的函数int Init(。。。)

JNIEXPORT jint JNICALL Java_HelloDll_f_Init
(JNIEnv * env, jclass, jstring data1, jstring retMsg, jstring data2){



}
...全文
57 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chao226 2009-04-27
  • 打赏
  • 举报
回复
谢谢两位的回答,问题已经解决了
sunyujia 2009-04-26
  • 打赏
  • 举报
回复
c++中应该是先HINSTANCE xxx=LoadLibrary("BaraingApplyV2.dll");
然后在FreeLibrary(xxx);

具体楼主可以多百度,
java调用dll很简单的,你现在的障碍应该是如何调研被封装了的BaraingApplyV2.dll

具体是不是使用HINSTANCE 楼主还多问问,我仅用过一次了解不深入
GG_wg 2009-04-26
  • 打赏
  • 举报
回复
在你调用的Java类里添加你需要调用的方法,
如:int Init(const char * Data1,char * retMsg,char* Data2)
类里:public native int init(const String Data1,String retMsg,String Data2);


chao226 2009-04-26
  • 打赏
  • 举报
回复
我查了很久了,网上都是
JNIEXPORT jint JNICALL Java_HelloDll_f_1UserBargaingInit
(JNIEnv * env, jclass, jstring data1, jstring retMsg, jstring data2){

typedef int (WINAPI *dll_interface_type)(LPCTSTR,LPCTSTR,LPCTSTR);

HINSTANCE module = ::LoadLibrary("BaraingApply.DLL");

dll_interface_type f = (dll_interface_type)::GetProcAddress(module, "Init");
return f("$$$$","$$0~~$$",""); //call

::FreeLibrary(module);

}
但是这样就报这个错:
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x02d688ac, pid=2536, tid=3316
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_07-b03 mixed mode, sharing)
# Problematic frame:
# C [BargaingApply.DLL+0x988ac]
#
# An error report file with more information is saved as hs_err_pid2536.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
真急

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧