C++调用jar包
来源:互联网 发布:java的substring方法 编辑:程序博客网 时间:2024/06/03 10:21
1、 先建立eclipse 建立JAVA工程,将工程打包成jar包。
2、 有了jar包后,在网上找了不少文章介绍如何调用,在调用过程中一个函数的参数不知如何获取,如截图中红线部分。
即方法在类中的内在描述。
我的做法是:
A、 打开cmd
B、 cd 到 java工程目录下
C、 输入指令 javacWinFile.java,此时在目录下生成WinFile.class
D、 输入javap –s WinFile,即可得到结果
3、 在load jvm.dll还遇到过不是有效的win32程序的问题,用dependswalk 打开jvm.dll也看不到其依赖文件。
最后的解决办法是卸载jdk,重新装x86版本及jre,就OK了。
4、C++调用代码:
int_tmain(intargc,_TCHAR*argv[])
{
intres;
JavaVMInitArgsvm_args;
JavaVMOptionoptions[3];
JavaVM*jvm=NULL;
JNIEnv*env=NULL;
RtlZeroMemory(&vm_args,sizeof(JavaVMInitArgs));
/*设置初始化参数*/
options[0].optionString="-Djava.compiler=NONE";//Disabled JIT
options[1].optionString="-Djava.class.path=.;Demo.jar";
options[2].optionString="-verbose:NONE";
vm_args.version=JNI_VERSION_1_8;
vm_args.nOptions=3;
vm_args.options=options;
vm_args.ignoreUnrecognized=JNI_TRUE;
// Load jvm.dll
DWORDdwErr1=GetLastError();
HINSTANCEhInstance=LoadLibrary("D:\\Program Files(x86)\\Java\\jdk1.8.0_92\\jre\\bin\\client\\jvm.dll");
DWORDdwErr=GetLastError();
if(hInstance==NULL)
returnfalse;
_CreateJavaVMm_CreateJavaVM=(_CreateJavaVM)GetProcAddress(hInstance,"JNI_CreateJavaVM");
res=(*m_CreateJavaVM)(&jvm,(void**)&env,&vm_args);
if(res<0)
return-1;
// Find the class
jclassHelloClass=env->FindClass("demo/WinFile");
// Find the main methodid
jmethodIDmid=
env->GetStaticMethodID(HelloClass,"sayHello","(Ljava/lang/String;)Ljava/lang/String;");
if(mid==0)
{
return-1;
}
std::stringstrUTF8;
std::stringstrNew="我是来自C++的string!";
jstringstrResult=(jstring)env->CallStaticObjectMethod(HelloClass,mid,env->NewStringUTF(strUTF8.c_str()));
char*pBuf=newchar[1024];
memset(pBuf,0,1024);
constchar*p=pBuf;
p=env->GetStringUTFChars(strResult,0);
env->ReleaseStringUTFChars(strResult,p);
jvm->DestroyJavaVM();
FreeLibrary(hInstance);
return0;
}
我的测试java工程(eclipse)及C++工程(VS2013)下载地址:
http://download.csdn.net/detail/xl19900502/9503378
参考博文:
http://blog.csdn.net/defonds/article/details/4932618
http://blog.itpub.net/28904215/viewspace-1250310/
http://blog.csdn.net/prog_6103/article/details/6373191
- C++调用jar包
- python调用jar包
- NodeJS调用jar包
- java使用jnative jar包调用C/C++
- Java动态调用jar包
- 调用jar包外配置文件
- C#调用jar包方法
- shell脚本调用jar包
- jar包调用jar包内部和外部的配置文件
- jar包调用jar包内部和外部的配置文件
- jar包调用jar包内部和外部的配置文件
- C#.NET调用jar包(java环境配置及ikvm安装)
- java中动态调用jar包
- 通过ClassLoader调用外部jar包
- 通过ClassLoader调用外部jar包
- C#调用java类、jar包方法。
- C#调用java类、jar包方法
- 通过ClassLoader调用外部jar包
- Git详解之一 Git起步
- 新浪微盘项目的“病危通知”
- JAVA编程常识汇总
- 每天laravel-20160725| Genaerator command-3
- 集成Dubbo服务(Spring)
- C++调用jar包
- Xcode7.1环境下上架iOS App到AppStore 流程 (Part 一)
- HDU--2032
- 单机版APP记住密码功能的实现及EditText的输入框背景设置
- android中的通信机制总结
- android 根目录 File Explore 下各个文件的含义及其关系
- 浅谈requireJS
- iOS的edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets属性
- kibana查询语法