小编kil*_*ick的帖子

为什么RegQueryValueEx()函数在尝试从注册表项读取时返回ERROR_FILE_NOT_FOUND?

系统:Windows 7 32位
语言:C++

我试图访问寄存器HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0,密钥Driver(类型REG_SZ) - 没问题.

例如,对于读取来说HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM,所有键(类型REG_SZ)都有斜线\Device\Serial0.

在读取这些键时,它总是返回2(没有这样的文件),并带有以下示例代码:

HKEY hKey = 0;
DWORD dwType = REG_SZ;
char buf[255] = {0};
DWORD dwBufSize = sizeof(buf);

if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_QUERY_VALUE, &hKey ) == ERROR_SUCCESS ) 
{
  auto ret = RegQueryValueEx( hKey, TEXT("\Device\Serial0"), 0, &dwType, (LPBYTE)buf, &dwBufSize );
  // ret always == 2 for key with slashes
--- CUT ---
Run Code Online (Sandbox Code Playgroud)

使用名称中的斜杠读取键值的正确方法是什么?


Cody Gray已正确回答了上述问题.
另一个问题.


我在使用变量而不是文本字符串时遇到了同样的问题.
我认为这两种方法都有单斜杠和双斜杠: …

c++ windows registry registrykey

7
推荐指数
1
解决办法
3万
查看次数

Qt Creator CONFIG(调试,发布)开关不起作用

问题:总是在Qt Creator 2.8.1 for Linux中选择调试或发布的地方评估CONFIG(调试,调试|发布)和CONFIG(发布,发布|发布).

我在Qt Creator应用程序中的配置(库存 - 新项目的默认值):

Projects->Build Settings->Debug Build Steps:
  qmake build configuration: Debug
  Effective qmake call: qmake2 proj.pro -r -spec linux-gnueabi-oe-g++ CONFIG+=debug

Projects->Build Settings->Release Build Steps:
  qmake build configuration: Release
  Effective qmake call: qmake2 proj.pro -r -spec linux-gnueabi-oe-g++
Run Code Online (Sandbox Code Playgroud)

我在proj.pro中的配置:

message(Variable CONFIG:)
message($$CONFIG)
CONFIG(debug,debug|release)
{
    message(Debug build)
}
CONFIG(release,debug|release)
{
    message(Release build)
}
Run Code Online (Sandbox Code Playgroud)

调试控制台上的输出:

Project MESSAGE: Variable CONFIG:
Project MESSAGE: lex yacc warn_on debug uic resources warn_on release incremental link_prl no_mocdepend release stl qt_no_framework debug console
Project …
Run Code Online (Sandbox Code Playgroud)

linux windows qt qt-creator

7
推荐指数
1
解决办法
7743
查看次数

QSocketNotifier:不能从另一个线程禁用套接字通知程序

我知道我无法在线程之间与 QTcpSocket 通信,但我找不到我做错了什么。

一旦我向另一个线程中的 QTcpSocket 发送数据发射信号,QSocketNotifier 应该禁用自身以让 QTcpSocket 读取数据。因为我遇到了上面的错误,所以它不会被禁用并且不会发出 readyRead() 信号。

我使用 QEventLoop 来实现阻塞机制(同步通信 - ModBus 协议)而不锁定主循环。我不能使用 waitReadyRead() 因为我过去在使用该函数时遇到了问题(超时):

https://bugreports.qt-project.org/browse/QTBUG-24451

https://bugreports.qt-project.org/browse/QTBUG-14975

有人可能会好奇为什么我要设置这么多线程:

Thread1:每次新的通信都会创建一个新线程,并用“全局”互斥锁将其锁定,以确保没有其他函数会执行并行通信。在该线程内 - 在准备和锁定互斥锁之后,我通过 Thread2 中的 Qt::QueuedConnection 信号(与设备的持续通信)与 QTcpSocket 通信。

Thread2:QTcpSocket 对象创建并移动到线程。一旦我连接到设备,我就不想关闭套接字。因为我阻塞了主事件循环,所以我需要其他事件循环来运行来自 QTcpSocket 的信号。

和代码:

void someFunctionThatWantToSendData( void ) // Main Thread
{
    ElfKernel::KernelSingleton::Instance().getGUIcontrol()->getCtrlUnitPtr()->execModbusCommand( someParameters, someCommunicationFunction );
}

ElfKernel::FrameReceived ControlUnit::execModbusCommand( std::list<unsigned int> paramsToCommand, FunctionStringList execCommand ) // Main Thread
{
    ModbusCommandReply* mcr = new ModbusCommandReply(); // THREAD_1!!!!!! this object run in a Thread -> ModbusCommandReply : public QThread …
Run Code Online (Sandbox Code Playgroud)

sockets networking qt qtcpsocket

3
推荐指数
1
解决办法
8754
查看次数

Qt 5 编码问题(UTF-8、Windows-1250、Windows-1251)

我所有的源文件都是UTF-8转换的。

\n\n

我打开的所有文件都是 UTF-8。

\n\n

我的应用程序正在打开 UTF-8 编码文件,其中包含 3 种语言的翻译文本:英语、波兰语和俄语,并将数据保存到文件中,分为 3 个单独的编码块:Windows-1250(英语)、Windows-1250(波兰语)和Windows-1251(俄语)- 是的,没错,我在一个文件中混合编码类型,然后由知道如何处理该文件的第三方设备使用。

\n\n

Iv 得到了一个在 Qt4 下完美运行的测试程序,现在当我转移到 Qt5 时它停止运行(文本保存为 ?????????):

\n\n
    \n
  • 测试编码.cpp

    \n\n
    test_encoding::test_encoding(QWidget *parent) : QMainWindow(parent)\n{\n  ui.setupUi(this);\n\n  QString d;\n  QFile f(QDir::currentPath() + "/input.txt");\n  if( f.open( QIODevice::ReadOnly | QIODevice::Text ) )\n  {\n    d = f.readAll();\n    f.close();\n  }\n\n  QFile ff(QDir::currentPath() + "/output.txt");\n  if( ff.open( QIODevice::WriteOnly | QIODevice::Text ) )\n  {\n    QTextStream t(&ff);\n    auto cutf8 = QTextCodec::codecForName("UTF-8");\n    auto cw50 = QTextCodec::codecForName("windows-1250");\n    auto cw51 = QTextCodec::codecForName("windows-1251");\n\n        // ____Block 1\n    t.setCodec(cutf8);\n    t …
    Run Code Online (Sandbox Code Playgroud)

c++ utf-8 character-encoding qt4.8 qt5

3
推荐指数
1
解决办法
6967
查看次数

Qt 5以XML产生随机属性顺序

从Qt 4.8切换到Qt 5.x时,您可能会注意到,每次保存XML文档时,它都会在文件内部产生随机的属性顺序。通过编程方式读取XML文档没有问题,因为在反序列化XML时允许以任何顺序存储属性。当您使用GIT,SVN等跟踪输出XML文件的更改时,这是一个问题。无法确定XML文件中的数据是否已更改或属性结构已更改。

是否可以在Qt 5.x中以与Qt 4.8中相同的方式生成XML文件?

xml random qt qt4 qt5

3
推荐指数
2
解决办法
1578
查看次数