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" 名称
我有一个 "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" 名称