GraphicsMagick 的 OpenCL 开发记录(二十五)

文章目录

  • [如何修复`R6025 pure virtual function call`问题](#如何修复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();是不是不好?

cpp 复制代码
case DLL_PROCESS_DETACH:
  DestroyMagick();
  break;

另IMDisplay.cpp中只有InitInstance(),却没有ExitInstance(),是不是应该显示调用MagickLib::DestroyMagick();比交给系统处理DLL_PROCESS_DETACH更好呢?

值得注意的是如果将ImageMagick的如下代码修改成这样:

cpp 复制代码
BOOL CIMDisplayApp::ExitInstance()
{
  // Magick::TerminateMagick();
  return CWinApp::ExitInstance();
}

同时保证ImageMagick的magick-baseconfig.h中的ProvideDllMain宏启用:

cpp 复制代码
/*
  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。

相关推荐
唐钰小宝B15 分钟前
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
java·开发语言·windows
北风toto1 小时前
Windows 下用 OpenSSL 生成 SSL 密钥并配置 Nginx 教程
windows·nginx·ssl
2601_962364971 小时前
升级电脑人脸登录,选购 Windows Hello 模组常见误区
windows·安全·电脑
xxwl5851 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法
小陈不好吃1 小时前
Java 泛型与类型擦除:从 PECS 原则到 TypeToken 绕过
java·开发语言·windows·pecs 原则·typetoken绕过
Helix2503 小时前
WinPE 实战:从零制作纯净 Windows 安装与维护 U 盘
windows·安装·uefi·winpe·adk·u盘启动盘·dism
余额瞒着我当琳3 小时前
哈希表底层原理解析,直接定址法,哈希冲突,负载因子,哈希函数,开放定址法
java·c++·哈希算法·散列表
xxwl5853 小时前
区域赛算法模版第五章---数学与数论
c++·笔记·算法
局部有解4 小时前
LeetCode Hot100 438 找到字符串中所有字母异位词
c++·算法·leetcode
David猪大卫4 小时前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习