jni创建虚拟机失败问题,c++dll调用java类在VM初始化中出现错误 20C

图片说明
如上图错误,代码如下:
string tmp0 ="-Djava.class.path=.;";
//cout<<tmp0<<endl;
string configTmp = tmp0 + m_p0 + ";" + m_p1;
//cout<<configTmp<<endl;
options[0].optionString = (char*)configTmp.c_str();
vm_args.version = JNI_VERSION_1_6; //设置版本号

vm_args.nOptions = 1;

vm_args.options = options;

vm_args.ignoreUnrecognized = JNI_TRUE;  

//定义一个函数指针,下面用来指向JVM中的JNI_CreateJavaVM函数  
typedef jint (WINAPI *PFunCreateJavaVM)(JavaVM **, void **, void *);  
//const wchar_t szJvmPath[]=L"D:\\Java\\jdk1.8.0_131\\jre\\bin\\client\\jvm.dll";  

int p2Len = m_p2.length();
WCHAR *szJvmPath = new WCHAR[p2Len+1];
MultiByteToWideChar(0, 0, m_p2.c_str(), -1, szJvmPath, p2Len+1);

cout<<szJvmPath<<endl;
hInstance = ::LoadLibrary(szJvmPath);  
cout<<"成功"<<endl;

delete []szJvmPath;
szJvmPath = NULL;
if (hInstance == NULL)     
{     
    cout<< "LoadLibrary False"<<endl;  
    cout<<::GetLastError()<<endl;  
    return false;     
}  
cout<<"成功1"<<endl;
//取得里面的JNI_CreateJavaVM函数指针  
PFunCreateJavaVM funCreateJavaVM = (PFunCreateJavaVM)::GetProcAddress(hInstance, "JNI_CreateJavaVM");  
cout<<"成功2"<<endl;
long status = (*funCreateJavaVM)(&jvm, (void**)&env, &vm_args);

//查找类,返回JAVA类的CLASS对象  
//jclass cls = env->FindClass("D:\\javaOfWorkspace\\Test20170502\\src\\test\\c_call_j");  
cout<<"成功3"<<endl;
cls = env->FindClass("test20170505/ParserDemo");  


在:  long status = (*funCreateJavaVM)(&jvm, (void**)&env, &vm_args);这一步出现错误,如果这个cpp不封装到dll中则能正常运行,封装以后就出现错误,其他配置都一样的,求大神解决。

1个回答

http://blog.csdn.net/ap0806223/article/details/7544348
参考里面的"使用C++调用Java的java.lang.String类" 部分

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐