在mfc的dll里再动态加载jvm.dll引发的问题--不要在构造函数里做复杂的init流程
2013-06-17 16:50
316 查看
最近遇到个bug。真的是深刻的教训。原来老工程是同事写的。在JavaINI的构造函数里调用了Init函数来完成初始化jvm的流程
现在我的任务是把c++调用java这个功能独立出来做成dll。我抽出代码后做好了dll后测试发现,流程走到调用JNI_CreateJavaVM这里,调用这个函数后卡住没有反应。单步也不走了,函数也不返回,好像死锁了。
花了好长时间才发现,在构造函数里屏蔽Init函数,增加一个专门用来初始化jvm的导出函数。加载dll后,再专门调用这个导出函数做初始化jvm的流程。这样就不会再卡在JNI_CreateJavaVM函数这里了
现在我的任务是把c++调用java这个功能独立出来做成dll。我抽出代码后做好了dll后测试发现,流程走到调用JNI_CreateJavaVM这里,调用这个函数后卡住没有反应。单步也不走了,函数也不返回,好像死锁了。
花了好长时间才发现,在构造函数里屏蔽Init函数,增加一个专门用来初始化jvm的导出函数。加载dll后,再专门调用这个导出函数做初始化jvm的流程。这样就不会再卡在JNI_CreateJavaVM函数这里了
相关文章推荐
- 动态加载dll的导出函数的问题
- 动态内存中加载DLL的问题
- 动态加载DLL的方法与注意的问题
- VC++动态链接库(DLL)编程深入浅出(三) - MFC动态库问题
- 解决JNA动态加载jar中dll问题
- 非MFC的DLL的生成和运行时动态加载
- MFC扩展dll,在构造函数中加载资源,导致程序exe启动困难。
- 关于动态加载dll问题
- WINCE驱动加载MFC DLL问题
- DLL运行时动态加加载的问题
- 动态Dll加载若干问题
- 静态加载dll,动态加载dll及常见问题处理
- _stdcall与_cdecl区别 (QT 加载MFC的dll时,要注意的"_stdcall"或者CALLBACK的问题)
- 动态加载DLL实现不同DLL的相同导出函数调用问题
- 解决VC中动态加载DLL时,必须将DLL文件放在EXE文件路经和系统目录下的问题
- java.lang.UnsatisfiedLinkError: Can not load XXX library ... JNA不能加载DLL动态库问题
- 仿MFC实现c++按名动态创建对象之续(瘦身以及解决其在dll中使用的问题)
- VC6.0MFC动态加载位图中出现的问题
- MFC静态加载dll和动态加载dll示例
- PHP intl扩展安装/ext/php_intl.dll文件无法动态加载的问题