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

相关推荐
不会C语言的男孩21 小时前
C++ SLTL编程
java·开发语言·c++
码农-阿杰1 天前
Java 线程等待唤醒机制深度解析:synchronized、ReentrantLock、LockSupport 底层实现对比
java·开发语言·c++
十五年专注C++开发1 天前
TypePerf:Windows 命令行性能计数器工具(CPU利用率、内存利用率、GPU利用率等)
c++·windows·typeperf
王老师青少年编程1 天前
csp信奥赛C++高频考点专项训练之字符串 --【字符串排序】:字符排序
c++·字符串·csp·高频考点·信奥赛·字符串排序·字符排序
杜子不疼.1 天前
【 C++ AI 大模型接入 SDK】 - 日志模块
开发语言·javascript·c++
3Tony1 天前
解决VScode报错:preLaunchTask“C/C++: gcc.exe 生成活动文件“已终止,退出代码为 -1.
c++·ide·vscode
C+++Python1 天前
C++ 泛型编程 极简示例代码
开发语言·c++
宵时待雨1 天前
回溯算法专题2:二叉树中的深搜
开发语言·数据结构·c++·笔记·算法·深度优先
学不思则罔1 天前
ParallelStream并发陷阱解析
java·开发语言·windows
计算机安禾1 天前
【c++面向对象编程】第21篇:运算符重载基础:语法、规则与不可重载的运算符
java·前端·c++