草庐IT

c++ - 使用 SHFileOperation : What errors are occuring

我正在使用函数SHFileOperation()将文件发送到回收站,但我收到2个错误,我不知道它们是什么意思,因为使用此函数时,错误代码不是GetLastError()值。当函数SHFileOperation()失败时,返回值为0x57(十进制87)和0x2(十进制2)。任何人都可以帮我发现这些错误的定义(特别是当你考虑这个函数时,错误不是GetLastError()代码的一部分)。一些重要信息:我使用的是Windows7(而且我知道MSDN说要使用IFileOperation而不是SHFileOperation,但我想让我的应用程序向后兼容,这就是我使用SHFileOperation

c++ - Windows 消息有多健壮?

如果我使用PostMessage对消息进行排队(并返回true),我能否确定窗口最终会处理该消息,除非发生某些灾难性事件?(无论如何都会使程序崩溃) 最佳答案 一旦发布的消息不会从队列中消失。我们的产品之一是Windows服务,它使用Windows消息在线程之间进行通信,并且严重依赖它们。到目前为止,我们看到的唯一问题是,如果您发布它们的速度太快,队列就会填满并且不会接受更多消息,直到有人开始清空队列。 关于c++-Windows消息有多健壮?,我们在StackOverflow上找到一个

c++ - 为什么使用错误的调用约定有时会奏效?

我使用“StartServiceCtrlDispatcher”函数在Windows中注册了一个回调函数(称为ServiceMain),但是我声明的回调函数是用错误的调用约定编译的。问题是,在某些计算机上,当应用程序从回调函数返回时,应用程序崩溃了,但在其他计算机上,应用程序没有崩溃。现在,一旦我发现这个错误,一切正常,但我只是不明白为什么在某些计算机上它可以正常工作而不会崩溃?谢谢!:-) 最佳答案 这都是特定于Windows的,我们在这里不是在谈论标准的C++。查看documentationofStartServiceDispat

C++ WCHAR 操作

我正在用C++开发一个微型Win32应用程序。我很早以前就学过C++基础知识,所以现在我完全被C++中的字符串搞糊涂了。没有WCHAR或TCHAR只有char和String。经过一些调查后,我决定不使用TCHAR。我认为我的问题非常简单,但我找不到如何在C++中操作字符串的明确指南。受近几年PHP编码的影响,我曾期望一些简单的字符串操作,但我错了!很简单,我只需要将新数据放入一个字符串即可。WCHAR*cs=L"\0";swprintf(cs,"NEWDATA");这是我的第一次尝试。在调试我的应用程序时,我调查过swprintf只将前2个字符放入我的csvar。我已经通过这种方式解决

c++ - 当为不存在的日期/时间设置 CreateWaitableTimer 时会发生什么?

2013年的夏令时(美国)从3月10日星期日凌晨2:00开始。也就是说,现在是2013年3月9日,我在已创建的可等待计时器句柄上调用以下API:FILETIMEftWhen=//PointsasabsolutetimetoMarch10th,2013,at2:10AMSetWaitableTimer(hTimer,ftWhen,0,NULL,NULL,TRUE);2013年3月10日,凌晨2:10是一个不存在的时间,因为时间将提前一小时调整,所以不是凌晨2点,而是凌晨3点。所以我的问题是,我的计时器会怎样?(我似乎找不到这种情况的文档。) 最佳答案

c++ - 异步过程调用

我正在尝试获取APC在我的C++代码中工作,但我失败了。我不知所措。在C#中它工作得很好(逻辑上相同的代码)。我希望线程2向线程1注入(inject)一个调用。但在我的C++项目中,由于某种原因它不会执行。我做错了什么?线程1(主线程)线程2(子线程,需要主线程执行一个函数)代码:#include"stdio.h"#include"windows.h"#defineTIME2500#defineLAST_ERRORprintf("lasterror:%i\r\n",GetLastError());HANDLEhandle1,handle2;voidThreadInfo(char*pre

c++ - 标准窗口打开/保存对话框被 WebKit 破坏

我们的团队正在使用Qt4.7.4开发一个复杂的应用程序。我们提供的关键功能之一需要由QWebBrowser呈现的HTML+JS内容。问题是加载某些页面会导致打开/保存对话框损坏:对话框在交互方面仍然“有效”:可以打开文件过滤器组合框,可以输入文件名,但所有这些都画错了。根本不绘制文件列表和目录树。我在Qtbugtracker和google上没有发现关于这个问题的错误报告。我们认为问题是我们项目的本地问题。我们假设一些comctl32.dll内部结构被某人对无效地址的写操作破坏了,但我们不知道如何捕获真正的原因。另外值得一提的是,这个问题不会出现在Qt5.4和低于8.0的任何版本的Win

C++ 将字节从 char* 传递到 BYTE*

我想知道如何在Windows的C++中将表示为char*的字节序列传递/复制到BYTE*。假设我有这个char*:constchar*ByteString="\x3B\xC8\x74\x1B"我如何将此char*中的每个字节复制到BYTE*Bytes中,反之亦然?编辑:非常感谢大家的帮助! 最佳答案 BYTE的定义是:typedefunsignedcharBYTE;这与constchar不同,因此您需要对其进行转换,但请注意丢弃const来自声明的东西const从导致未定义行为的结果开始并尝试实际更改数据会带来更大的风险。BYTE*

c++ - DllMain Attach 和 Detach 过程中的使用限制

我的一位同事在DllMainDetach过程中遇到了麻烦。他的错误似乎并非在所有情况下都出现,但相当频繁。在尝试帮助他时,我想起了一些DllMainAttach和Detach过程中的使用限制,但我不确定我是否记得清楚,因为这是2年前的技术讨论,而且它不是我在处理那些终止问题。也就是说,我有点记得我们应该:避免使用new和delete运算符,更喜欢HGLOBAL内存分配避免在此处处理线程终止。如果我错了,你能纠正我吗?如果有的话,请解释一下,或者指出一篇可以解决这些问题的技术文章。 最佳答案 避免调用LoadLibrary和相关API

c++ - 使 Win32 应用程序在 ANSI 和 UNICODE 上工作

我想让我的Win32C++应用程序能够在任何编码版本(UNICODE和ANSI)上播放。现在我对两种(或更多?)编码之间到底有什么区别感到有点困惑?要使我的Win32应用程序交叉编码兼容是否意味着我必须检查我的代码并将每个std::string替换为std::wstring,然后将每个字符替换为wchar_t*然后将每个文字字符串("")替换为L""?如果我的应用程序在UNICODE机器上运行并且我的应用程序中有一个std::string会怎样?对于使我的应用程序交叉编码兼容需要采取的步骤,您有什么建议吗?例如:-将所有c_strings和字符串更改为其等效的UNICODE-将任何Wi