关闭

JNI调用第三方C++ dll

发表于:2014-6-27 09:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:mjm13    来源:51Testing软件测试网采编

  最近工作需要要调用第三方厂商提供的dll,学了下JNI,来分享下。
  说明:使用JNI来调用dll是JAVA调用符合JNI规范的dll,如需调用第三方的dll是在符合JNI规范的dll中再用c++掉用第三方的dll中的方法。
  操作步骤:
  1.新建java类将需要掉用的方法声明为native,增加导入dll的代码,例如:
public static native ArrayList readCard(byte[] dataBuf);
static {
System.loadLibrary("XFBankJni");
}
  其中load的部分不是固定的,C++的项目生成的dll文件名即可
  2.先使用javac命令编译java类,然后使用javah命令编译 会生成“包名_java类名.h”,“.h”为C++中dll的头文件
  3.vs新建一个C++的Win32项目,应用程序类型选择DLL,将生成的头文件拷贝带该项目中。
  4.在生成的项目名.CPP文件中导入该头文件,并实现这些方法。
  5.调用第三方dll,申明方法,加载dll
HINSTANCE hDLL = LoadLibrary(_T("XfBankRwCard.dll"));//加载dll
if(hDLL==NULL){
return jobjct();
}
typedef int (WINAPI *InnoverCard)(char* dataBuf);//申明第三方dll中方法格式
InnoverCard icard=(InnoverCard)GetProcAddress(hDLL,"innoverCard");//加载dll中的方法
int result = icard(data);//调用第三方方法
  碰到的问题:(由于没用过vs,c++所以碰到很多很低级的问题,写在这里希望对跟我一样不博学的人有帮助 ^_^)
  将java生成的“xxx.h”头文件拷贝到vs2010中保存之后各种报错,无法解析JNIEXPORT等JNI关键字。
  解决方法:VS中在项目上右键打开属性 -> C/C++ -> 常规-> 附加包含目录: 添加jni对应的头文件
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号