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

wlwcrazw  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(126)

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

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

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

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

字符串
最小示例:

  • header*
#ifndef MINIMAL_H
#define MINIMAL_H

#include <QMainWindow>
#include <pcl/io/pcd_io.h>
#include <opencv2/opencv.hpp>

QT_BEGIN_NAMESPACE
namespace Ui
{
  class Minimal;
}
QT_END_NAMESPACE

class Minimal : public QMainWindow
{
  Q_OBJECT

public:
  Minimal(QWidget *parent = nullptr);
  ~Minimal();

private:
  bool readPcd(const QString &file, pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud);

  bool readImage(const QString &file, cv::Mat &image);

  Ui::Minimal *ui;
};
#endif // MINIMAL_H

  • 来源 *
#include "minimal.h"
#include "./ui_minimal.h"
#include <QDebug>

Minimal::Minimal(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::Minimal)
{
  ui->setupUi(this);

  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
  readPcd("..\\example_data\\20210209152054.pcd", cloud);
  qDebug() << "cloud size is " << cloud->points.size();

  cv::Mat image;
  readImage("..\\example_data\\20210209152054.jpg", image);
  qDebug() << "image size is " << image.cols << " x " << image.rows;
}

Minimal::~Minimal()
{
  delete ui;
}

bool Minimal::readPcd(const QString &file, pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud)
{
  cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
  if(pcl::io::loadPCDFile(file.toStdString(), *cloud) == -1)
  {
    std::cout << "read pcd file error " << std::endl;
    return false;
  }
  return true;
}

bool Minimal::readImage(const QString &file, cv::Mat &image)
{
  image = cv::imread(file.toStdString());
  return (!image.empty());
}


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

  • main.cpp*
#include "minimal.h"

#include <QApplication>
#include <QLocale>
#include <QTranslator>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTranslator translator;
    const QStringList uiLanguages = QLocale::system().uiLanguages();
    for (const QString &locale : uiLanguages) {
        const QString baseName = "Minimal_" + QLocale(locale).name();
        if (translator.load(":/i18n/" + baseName)) {
            a.installTranslator(&translator);
            break;
        }
    }
    Minimal w;
    w.show();
    return a.exec();
}


我该怎么办?

j7dteeu8

j7dteeu81#

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

vivetool /query 41799415

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

vivetool /disable 41799415


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

相关问题