我正在使用Win10 SDK在Win11上开发应用程序,这是我的环境:
当我在调试模式下从 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.
最小示例:
标题
#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();
}
我能做什么?
这不是您的程序的问题,而是当前正在实验中的新“shell 手写”功能(MTestAbSh1,41799415)的错误。您可以下载ViVeTool来检查该功能是否启用:
vivetool /query /id:41799415
如果您像我一样,此功能可能设置为“实验”,这意味着它已在您的计算机上启用以进行测试。您可以通过以下方式禁用它:
vivetool /disable /id:41799415
这将手动覆盖它以禁用该功能。这不会立即生效,之后您需要重新启动。之后,断言失败就不会再出现了。
我大约一个月前遇到了这个问题,并通过几种不同的途径报告了这个问题。我在 twitter 上写了一些反编译和调试 MSCTF.dll 的过程。