c++ MSCTF.dll报告“发生Assert失败”

wlwcrazw  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(186)

我正在使用Win10 SDK在Win11上开发应用程序,这是我的环境:

  • MSVC v142
  • Win10 SDK(10.0.19041.0)
  • 简体中文
  • OpenCV 4.8.0
  • Qt 5.15.2

当我在调试模式下从Qt Creator运行我的应用程序时,它会抱怨:

  1. clientcore\windows\advcore\ctf\uim\tim.cpp(800)\MSCTF.dll!00007FFA625262B9:
  2. (caller: 00007FFA62526EEC) LogHr(1) tid(267c) 8007029C
  3. An assertion failure has occurred.

字符串
最小示例:

  • header*
  1. #ifndef MINIMAL_H
  2. #define MINIMAL_H
  3. #include <QMainWindow>
  4. #include <pcl/io/pcd_io.h>
  5. #include <opencv2/opencv.hpp>
  6. QT_BEGIN_NAMESPACE
  7. namespace Ui
  8. {
  9. class Minimal;
  10. }
  11. QT_END_NAMESPACE
  12. class Minimal : public QMainWindow
  13. {
  14. Q_OBJECT
  15. public:
  16. Minimal(QWidget *parent = nullptr);
  17. ~Minimal();
  18. private:
  19. bool readPcd(const QString &file, pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud);
  20. bool readImage(const QString &file, cv::Mat &image);
  21. Ui::Minimal *ui;
  22. };
  23. #endif // MINIMAL_H

  • 来源 *
  1. #include "minimal.h"
  2. #include "./ui_minimal.h"
  3. #include <QDebug>
  4. Minimal::Minimal(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::Minimal)
  7. {
  8. ui->setupUi(this);
  9. pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
  10. readPcd("..\\example_data\\20210209152054.pcd", cloud);
  11. qDebug() << "cloud size is " << cloud->points.size();
  12. cv::Mat image;
  13. readImage("..\\example_data\\20210209152054.jpg", image);
  14. qDebug() << "image size is " << image.cols << " x " << image.rows;
  15. }
  16. Minimal::~Minimal()
  17. {
  18. delete ui;
  19. }
  20. bool Minimal::readPcd(const QString &file, pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud)
  21. {
  22. cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
  23. if(pcl::io::loadPCDFile(file.toStdString(), *cloud) == -1)
  24. {
  25. std::cout << "read pcd file error " << std::endl;
  26. return false;
  27. }
  28. return true;
  29. }
  30. bool Minimal::readImage(const QString &file, cv::Mat &image)
  31. {
  32. image = cv::imread(file.toStdString());
  33. return (!image.empty());
  34. }


=更新=添加由qtcreator创建的main.cpp

  • main.cpp*
  1. #include "minimal.h"
  2. #include <QApplication>
  3. #include <QLocale>
  4. #include <QTranslator>
  5. int main(int argc, char *argv[])
  6. {
  7. QApplication a(argc, argv);
  8. QTranslator translator;
  9. const QStringList uiLanguages = QLocale::system().uiLanguages();
  10. for (const QString &locale : uiLanguages) {
  11. const QString baseName = "Minimal_" + QLocale(locale).name();
  12. if (translator.load(":/i18n/" + baseName)) {
  13. a.installTranslator(&translator);
  14. break;
  15. }
  16. }
  17. Minimal w;
  18. w.show();
  19. return a.exec();
  20. }


我该怎么办?

j7dteeu8

j7dteeu81#

这不是你的程序的问题,这是一个新的“shell手写”功能(MTestAbSh1,41799415)的错误,目前正在实验中。你可以下载ViVeTool来检查该功能是否启用:

  1. vivetool /query 41799415

字符串
如果你和我一样,这个功能可能被设置为“实验”,这意味着它在你的机器上被启用用于测试。你可以通过以下命令禁用它:

  1. vivetool /disable 41799415


这将手动覆盖它以禁用该功能。这不会立即生效,之后您需要重新启动。之后,Assert失败应该不再出现。
大约一个月前我遇到了这个问题,并通过几个不同的途径报告了这个问题。我写了一些反编译和调试MSCTF.dll on twitter的过程。

相关问题