Qt5.4.1升级到5.12.1,现在QCodec报异常

Upgraded Qt5.4.1 to 5.12.1, and now QCodec gives an exception

我有一个 "inherited" 项目,它运行良好,但我们升级它以使用 visual studio 2015 和 qt 5.12.1。

但由于某种原因,它现在给出了一个例外。它基本上做的是检查 regedit 中的一个位置(从另一个应用程序写入)并读取一个字符串值(记录用户)。它所做的查询是:

命令:

wmic /node:127.0.0.1 /user: "User" /password:"Password" class stdregprov call GetStringValue hDefKey="&H80000007" sSubKeyName=Software\Company\ApplicationServer sValueName=USERS"

当我从 cmd 运行 这是一个结果时 return 并且在应用程序中也给出了相同的结果。

return值为 输出:

Executing (stdregprov)->GetStringValue()

Method execution successful.

Out Parameters:
instance of __PARAMETERS
{
  ReturnValue = 0;
  sValue = "";
}

但是当它尝试下面代码中的编解码器时,它给出了访问冲突异常。请注意,cmd 是我们发送给 cmd 的参数(如上所示),out 是响应(如上所示)。

void MyUtil::runProcess(QString& cmd, QString& out, QString& arr){

QProcess process;
process.start(cmd);
proces.waitForFinished(osProcessTimeout*1000);

if(cmd.contains("sValueName=USERS")){ //which is true for our problem
QByteArray arr = process.readAllStandardOutput();
QTextCodec *codec = QTextCodec::codecForName("857");
out = codec->toUnicode(arr);   // ----> WHERE IT GIVES THE EXCEPTION

}else{

out = process.readAllStandardOutput();

}

err = process.readAllStandardError();

}

codec 可能是 nullptr,因为它找不到名称为 857 的编解码器 ... https://doc.qt.io/qt-5/qtextcodec.html 您的编解码器名称 857 似乎无效;除非是你定制的。你可能应该使用 codecForLocale,除非你想要一个特定的编解码器,在这种情况下你需要它是正确的 "Qt" 名称