文章目录
- 如何修复`R6025 pure virtual function call`问题
<2022-04-19 周二>
如何修复R6025 pure virtual function call
问题
运气好,修复了这个问题。即,在ExitInstance()
函数中调用一下MagickLib::DestroyMagick();
即可。
过程中也经历了尝试vs2010
编译,尝试更换电脑环境等,均没有找到原因,同时我也在怀疑会不会是IMDisplay.exe
这个外部的测试程序问题引起的?毕竟ImageMagick
和GraphicsMagick
的这个IMDisplay.exe
程序相差也是很大的。
同时了解调用OpenCLTerminus()
的所有地方,在nt_base.c:DllMain()
的DLL_PROCESS_DETACH
里面调用DestroyMagick();
是不是不好?
case DLL_PROCESS_DETACH:
DestroyMagick();
break;
另IMDisplay.cpp
中只有InitInstance()
,却没有ExitInstance()
,是不是应该显示调用MagickLib::DestroyMagick();
比交给系统处理DLL_PROCESS_DETACH
更好呢?
值得注意的是如果将ImageMagick
的如下代码修改成这样:
BOOL CIMDisplayApp::ExitInstance()
{
// Magick::TerminateMagick();
return CWinApp::ExitInstance();
}
同时保证ImageMagick
的magick-baseconfig.h
中的ProvideDllMain
宏启用:
/*
When building ImageMagick using DLLs, include a DllMain()
function which automatically invokes MagickCoreGenesis(NULL), and
MagickCoreTerminus() so that the user doesn't need to. This is disabled
by default.
*/
#define ProvideDllMain
则ImageMagick
也同样会出现R6025
的错误。
见commit
:fix R6025 on windows。