slg09636 2017-06-15 00:46 采纳率: 0%
浏览 2201
已结题

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

图片说明
如上图错误,代码如下:
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条回答

  • _1_1_7_ 2017-06-15 06:31
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀