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

 

0 0