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 matlab实现基于主成分变换的图像融合。
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊