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这个外部的测试程序问题引起的?毕竟ImageMagickGraphicsMagick的这个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();
}

同时保证ImageMagickmagick-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的错误。

commitfix R6025 on windows

相关推荐
艾莉丝努力练剑12 小时前
【Linux加餐】mmap文件映射
linux·运维·服务器·c语言·c++·学习
叶子野格12 小时前
《C语言学习:编程例题》8
c语言·开发语言·c++·学习·算法·visual studio
6Hzlia12 小时前
【Hot 100 刷题计划】 LeetCode 152. 乘积最大子数组 | C++ 动态规划 (绝妙 swap 翻转技巧)
c++·leetcode·动态规划
公子小六12 小时前
基于.NET的Windows窗体编程之WinForms事件简介
windows·microsoft·c#·.net
HockerF12 小时前
cpu原理到c/c++指针
c语言·c++
John.Lewis12 小时前
C++加餐课-二叉树:进阶算法
数据结构·c++·算法
Q741_14713 小时前
设计模式之装饰器模式 理论总结 C++代码实战
c++·设计模式·装饰器模式
脱氧核糖核酸__13 小时前
LeetCode热题100——54.螺旋矩阵(题解+答案+要点)
c++·算法·leetcode·矩阵
!停13 小时前
C++入门STL容器string底层剖析
开发语言·c++
会编程的土豆13 小时前
【数据结构与算法】栈的应用
数据结构·c++·算法