一旦我运行我的代码(注意我只使用C,没有QT和没有C ++),我从IDE中的应用程序输出中得到以下消息:
无法获得劣质的句柄:参数不正确。
当我删除makefile和debug / release文件夹时,它正在运行,但一段时间后我仍然收到错误。这不是一个问题,代码运行,一切都很好,但这个错误弹出,这很烦人。
.pro文件的内容是:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
QMAKE_CC = gcc -std=c99
SOURCES += main.c
提前致谢!
编辑:我添加了C ++标记,因为在我的情况下,C ++控制台应用程序也会出现此错误。
答案 0 :(得分:8)
我遇到了同样的问题。论坛上的提示和建议相当无能为力,所以我自己调查了问题,发现它是QtCreator中的一个错误。
有一个名为qtcreator_process_stub
的脏小程序。每当您在IDE中运行程序时,IDE首先运行qtcreator_process_stub
并将您的程序名称作为参数传递(在其他一些参数中)。 qtcreator_process_stub
然后将程序作为单独的进程启动并打印其PID(并在Windows上也显示线程ID)。信息将打印到管道,然后由ConsoleProcess::readStubOutput()
读取,ConsoleProcess::readStubOutput()
是QtCreator使用的Utils.dll
库的一部分。
问题发生在"劣等"进程(您的应用程序)在处理整个通信之前完成执行。 OpenProcess()
尝试在关闭句柄的非现有流程上使用OpenProcess()
。 ConsoleProcess::readStubOutput()
失败因此错误"无法获得劣质的句柄:参数不正确。"。整个错误处理不是很轻微(嗯,现在是什么?)......: - /
<强>解决方案:强>
当您添加一些用户输入操作,暂停,睡眠,延迟或只是一些循环时,应用程序的执行时间会更长,错误消失。在您的申请退出之前,{{3}}有足够的时间执行OpenProcess()
。因此,作为一个工作区,我建议在修复错误之前这样做。
答案 1 :(得分:1)
在Qt中处理C ++项目时,我反复得到同样的错误。我能够通过将我正在使用的一个共享库(.dll)复制到build文件夹来解决它。
因此,如果您正在使用运行时所需的任何共享外部库,请确保它们位于构建文件夹中。