草庐IT

c++ - 尝试在 Windows 上重定向标准输出和标准错误 - _fileno(stdout) 返回 -2

这是我的第一个问题!我准备将一些工作良好的C++代码从UNIX移植到Windows,它通过管道将stdout和stderr重定向到自定义GUI组件。我需要它来显示来自第三方库的反馈,该库仅将消息输出到我的GUI上的标准输出。根据这个答案https://stackoverflow.com/a/617158这应该工作。事实上,链接中的代码在使用VisualStudio2017构建的新命令行应用程序中按预期工作。但是在我现有的GUI应用程序中,调用_fileno(stdout)以及_fileno(stderr)两者都返回-2而不是预期值1和2,因此什么也没有发生。将1和2硬编码到相关函数也无

c++ - 是否每个 Windows 服务都调用其可执行的 main 函数?

我有一个关于Windows服务的非常基本的问题,我有这个安装的main函数,我可以用它来安装我的服务,还有一些配置数据加载到main函数中:intwmain(intargc,WCHAR*argv[]){//itreadsconfigandfillaglobalstruct.ReadConfig();//ifcommand=='install'install_service();}这是服务的主要功能:voidWINAPIServiceMain(DWORDargc,WCHAR*argv[]){//thismethodretrievestheglobalconfigobject.autoco

c++ - 找到一些宏被#define-ed的地方

底线:使用VS2012构建,在我的项目中定义了一个宏(WIN32_LEAN_AND_MEAN)我在任何地方都找不到#define-ed:不在C/C++中-->预处理器,不是从父级或项目依赖项继承的(microsoft.cpp.props),而不是在命令行中。vcxproj中的任何地方都没有提到它。编译项目中的单个源/header,我发现它已经在header的第一行定义了。把这个放在我的标题的顶部:#pragmaonce#ifndefWIN32_LEAN_AND_MEAN#pragmamessage("WIN32_LEAN_AND_MEANnotdefined")#else#pragma

c++ - 为什么其他 PC 需要一些 DLL 文件,而我自己的不需要?

我用C++编写了一些程序。我可以在我的电脑上运行它。但是,如果我尝试在其他电脑上打开.exe文件,由于缺少DLL,总是会出现错误。如果程序很短,则没有错误。我不明白为什么! 最佳答案 您的编译器通常带有DLL。简单的操作,如打印和在某些情况下调用应用程序的入口点(即类似main的东西),都是由库完成的,并不总是由操作系统提供。在Windows上,您应该附带一个“可再分发的”C++运行时。 关于c++-为什么其他PC需要一些DLL文件,而我自己的不需要?,我们在StackOverflow上

c++ - 使用来自系统级进程(Windows 服务)的登录用户上下文模拟和运行任何方法 :

我已经创建了一个模板类,它将创建一个带有登录用户token的线程并运行任何方法。我在std::function的帮助下将它传递给模板类,并在用户级上下文中运行它。我目前的使用情况:1.该类用于windows服务进程(以SYSTEM级别运行)。2.线程在挂起状态下创建,SetThreadToken()用于应用从“explorer.exe”创建的模拟token。(我知道在多个登录用户的情况下这不是一种可行的方法,但暂时我需要这个东西来解决问题)。3.在这些之后,我将恢复线程以在用户级上下文中执行传递的util方法。引用的线程模拟来自:Createthreadwithspecificpriv

c++ - boost::filesystem::space() 报告错误的磁盘空间

我在驱动器C:上有430GB的空闲空间。但是对于这个程序:#include#includeintmain(){boost::filesystem::pathp("C:");std::size_tfreeSpace=boost::filesystem::space(p).free;std::cout输出是:2542768128Bytes2424MB2542768128Bytes2424MB2830102528Bytes2698MB我需要知道有多少磁盘空间可用,因为我的应用程序必须下载一个巨大的文件,我需要知道下载它是否可行。我在Windows上使用mingw:g++(i686-posix

c++ - 静态链接MSVC库,动态链接Qt

我正在部署我用Qt构建的东西,它是动态链接的,因为LGPL。我使用windeployqt.exe收集必要的dll,它在Windows10机器上运行良好。当我在Windows7机器上尝试时,出现了这个错误:Theprogramcan'tstartbecauseMSVCP140.dllismissingfromyourcomputer.经过一番研究,发现MSVCP140.dll是VisualStudio安装的System32中的一个dll。我应该让我的客户安装VisualStudio,这对我来说不是一个选项,或者静态链接它。我尝试使用/MT但我得到了:Overriding/MTwith/M

c++ - 如何使用 PostThreadMessage 从 C++ 关闭 Internet Explorer

我正在尝试启动iexplore.exe让它运行5秒钟,然后再次将其关闭。iexplore打开很好,但是当我调用PostThreadMessage时它没有关闭。谁能看到我做错了什么?这是我的代码:CStringIEPath="C:\\ProgramFiles\\InternetExplorer\\IEXPLORE.EXE";//GetIEPath();//IEPath+=''+url;std::stringstrCommand((LPCTSTR)IEPath);PROCESS_INFORMATIONprocinfo;STARTUPINFOstartupinfo;GetStartupInf

c++ - 等同于 MFC 窗口的 OnFinalMessage?

ATLCWindow类有一个有用的虚方法OnFinalMessage,它会在窗口的最后一条窗口消息被处理后调用-此时可以安全地销毁或删除与窗口关联的任何对象。从MFCCWnd类派生的窗口是否有任何等效项? 最佳答案 PostNcDestroy()正是您要找的。顺便说一句,如果您要实现无模式对话框并正在寻找“删除此内容”的位置,PostNcDestroy()就是合适的地方。 关于c++-等同于MFC窗口的OnFinalMessage?,我们在StackOverflow上找到一个类似的问题:

c++ - 如何使用非托管 C++ 在 Windows 上获取已安装字体的列表?

我进行了一些探索,到目前为止我已经找到了EnumFontFamiliesEx(...)。但是,看起来此函数用于返回给定字体(例如“Arial”)的所有字符集。我一开始不太明白如何获取已安装字体的列表。任何帮助/建议将不胜感激。提前谢谢你。 最佳答案 你可以这样做:LOGFONTlf;lf.lfFaceName[0]='\0';lf.lfCharSet=DEFAULT_CHARSET;HDChDC=::GetDC();EnumFontFamiliesEx(hDC,&lf,(FONTENUMPROC)&EnumFontFamExProc