Win32下c++调用java

Win32下c++调用java实现磁盘MP3扫描:



/***************************此处用到jni.h及jni_md.h,其中jni.h是jdk下的,不是ndk下的*****************************/


void getJavaMethod(){
 
JavaVMOption options[4];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
typedef jint (WINAPI* JNICreateJavaVM)(JavaVM**, JNIEnv**, void *);// typedef的功能是定义新的类型


long status;
jclass cls;
jmethodID mid;


//------------------------------加载jvm 
HINSTANCE jvmDll = LoadLibrary(TEXT("D:\\Software_install\\code\\Keith_Cocos2dx2.2.0\\cocos2dx32\\Java\\jdk1.7.0_40\\jre\\bin\\server\\jvm.dll"));
if (jvmDll == NULL) 
CCLOG("加载JVM动态库错误。%l", ::GetLastError());    
//查找JNI_CreateJavaVM过程。    
JNICreateJavaVM jvmCreateProc = (JNICreateJavaVM)GetProcAddress(jvmDll, "JNI_CreateJavaVM");    
if (jvmCreateProc == NULL)    
{    
FreeLibrary(jvmDll);    
CCLOG("查找JNI_CreateJavaVM过程错误。%l", ::GetLastError());   
return;
}    
//自定义类的路径
options[0].optionString = "-Djava.compiler=NONE";           // disable JIT  
//F:\\Keith_Code\\Keith_Java\\SD\\libs\\android-support-v4.jar;
//需设置类路径,还需要设置java支持的jar路径!!!!!!!!
options[1].optionString = "-Djava.class.path=F:\\Keith_Code\\Keith_Java\\SD\\bin\\classes;D:\\Software_install\\code\\Keith_Cocos2dx2.2.0\\cocos2dx32\\sdk\\platforms\\android-19\\android.jar";// user classes
options[2].optionString = "-Djava.library.path=jvmLib"; // set native library path  
options[3].optionString = "-verbose:jni";                   // print JNI-related messages 


memset(&vm_args, 0, sizeof(vm_args));
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 4;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;


//创建JVM:    
status = (jvmCreateProc)(&jvm, (JNIEnv **)&env, &vm_args);//创建失败时status等于-4,重启工程后解决了,不清楚。    
if (status < 0 || jvm == NULL || env == NULL)    
{    
FreeLibrary(jvmDll);    
CCLOG( "创建JVM发生错误。");  
return;

//设置动态链接库:添加延迟加载即可  不可直接将jvm.dll复制,这样可能缺少文件,导致JNI_CreateJavaVM失败
//status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); 
if (status != JNI_ERR)
{
//注意包的写法是'/'
cls = env->FindClass("com/example/sd/MainActivity");
if(cls !=0)
{
mid = env->GetStaticMethodID(cls, "getFilePath", "()V");
if(mid !=0)
{
env->CallStaticVoidMethod(cls, mid);
}
CCLOG("mid==========%d",mid);


}
else CCLOG("FindClass(MainActivity)========ERROR");
jvm->DestroyJavaVM();
}
FreeLibrary(jvmDll);  
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值