
C++
文章平均质量分 77
C++ 是一种高级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C++ 可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本。
0x0007
everything
展开
-
C++ 关键字 :using
在 C/C++ 中,定义类型别名的方法有#define、typedefusing 多种方式。#define 是宏定义关键字,用途广法,尤其是 C 中,不局限于类型别名定义。在C++中,推荐使用using来定义类型别名,因为它更符合C++的现代编程风格。似乎三者没有明显区别,当然由于#define 宏定义的本质,和后两者是可以明显区分开的。那么,typedef 和using的区别在哪里呢?首先,使用typedef定义的别名和使用using定义的别名在语义上是等效的。原创 2024-05-14 17:15:00 · 4054 阅读 · 0 评论 -
翻译《The Old New Thing》- When does a process ID become available for reuse?
进程 ID 何时可以被 复用?是在进程句柄变为已信号状态时(但在僵尸对象从系统中移除之前),还是只有在最后一个进程句柄被释放后(进程对象从系统中移除)才会发生?如果是前者,OpenProcess() 对僵尸进程会成功吗?(即已经终止但尚未从系统中移除的那个)原创 2024-06-22 06:45:00 · 428 阅读 · 0 评论 -
翻译《The Old New Thing》- How do I suppress the error box that appears when a LoadLibrary fails?
在 LoadLibrary 失败时,将 SEM_FAILCRITICALERRORS 标志添加到已经设置的任何标志中。原创 2024-06-16 13:27:49 · 346 阅读 · 0 评论 -
翻译《The Old New Thing》- How can I add an environment variable to a process launched via ...
本文展示了如何在 `ShellExecuteEx` 和 `IContextMenu` 调用中通过实现 `ICreatingProcess` 接口来向进程添加环境变量,并使用 C++/WinRT 库创建自定义服务站点。原创 2024-06-16 13:21:22 · 688 阅读 · 0 评论 -
翻译《The Old New Thing》- Setting the contents of a Windows Runtime Vector from C++/WinRT in one call
在一次调用中设置 C++/WinRT 中 Windows 运行时向量的元素原创 2024-06-12 18:34:10 · 493 阅读 · 0 评论 -
翻译《The Old New Thing》- A graphical depiction of the steps in building a C++ executable, enhanced ...
这篇文章是关于如何在Windows环境下,特别是针对传统的Win32应用程序,构建C++可执行文件的详细步骤图解原创 2024-06-11 09:48:15 · 626 阅读 · 0 评论 -
翻译《The Old New Thing》- Why doesn‘t Explorer have an interface for creating hard links?
资源管理器未提供创建硬链接的用户界面,因为硬链接概念复杂,普通用户难以理解,且可能引发数据损坏和备份问题。原创 2024-06-10 11:22:00 · 429 阅读 · 0 评论 -
翻译《The Old New Thing》- On 64-bit Windows, 32-bit programs run in an emulation layer, and if you ...
在64位Windows上,32位程序在仿真层上运行,如果你不喜欢那样,那就不要使用仿真器.原创 2024-06-09 09:52:46 · 595 阅读 · 0 评论 -
翻译《The Old New Thing》- Why isn’t there a SendThreadMessage function?
文章讨论了 Windows 中不存在 `SendThreadMessage` 函数的原因,指出通常应发送常规窗口消息而非线程消息,并建议使用窗口消息代替。原创 2024-06-08 21:58:54 · 824 阅读 · 0 评论 -
翻译《The Old New Thing》- QueryPerformanceCounter counts elapsed time, not CPU cycles
`QueryPerformanceCounter`记录经过的时间而非CPU周期,因为其频率在系统运行时不变。创建与CPU周期相关的计数器需要定义跨架构的“CPU周期”概念,并解决多处理器和超线程情况下的计数问题。HAL编写者会为已知的有缺陷硬件添加检测和变通代码。原创 2024-06-07 09:31:41 · 376 阅读 · 0 评论 -
翻译《The Old New Thing》- What were ShellExecute hooks designed for?
ShellExecute钩子设计用于扩展可执行字符串集合,如使IE能通过"运行"对话框打开网址。滥用此钩子进行安全检查或审计,不仅违背设计初衷,也可能因其他钩子或直接调用CreateProcess而失效。原创 2024-06-07 09:28:15 · 1149 阅读 · 0 评论 -
翻译《The Old New Thing》If you return FALSE from DLL_PROCESS_ATTACH, will you get a DLL_PROCESS_DETACH?
如果从 DLL_PROCESS_ATTACH 返回 FALSE,是否会得到 DLL_PROCESS_DETACH?原创 2024-06-06 19:02:20 · 893 阅读 · 0 评论 -
翻译《The Old New Thing》- What’s with this MSH_MOUSEWHEEL message?
`MSH_MOUSEWHEEL`是为旧版Windows设计的滚轮消息,与`WM_MOUSEWHEEL`不同,它从前景窗口向外传播,需要手动处理。`WM_MOUSEWHEEL`则自动从焦点窗口向父窗口链冒泡。两者处理机制不同,导致在某些情况下`WM_MOUSEWHEEL`可能被错误地传递到非预期的子窗口。原创 2024-06-06 18:46:55 · 1062 阅读 · 0 评论 -
翻译《The Old New Thing》- Why does OpenProcess succeed even when I add three to the process ID?
用户发现在Windows NT中,向进程ID加3后调用`OpenProcess`仍能成功,这是因为内核句柄管理器忽略最低两位,所以加3不影响映射。但这是实现细节,可能随时改变。原创 2024-06-05 10:11:11 · 492 阅读 · 0 评论 -
翻译《The Old New Thing》- Why do atoms start at 0xC000?
在16位Windows系统中,原子表中的指针是16位,且内存块4字节对齐,因此原子值从`0xC000`开始以区分整数原子和字符串原子。整数原子范围是`0x0000-0xBFFF`,字符串原子是`0xC000-0xFFFF`。尽管Win32不再使用编码指针,但原子的这种划分方式仍被保留。原创 2024-06-04 14:17:31 · 345 阅读 · 0 评论 -
翻译《The Old New Thing》- What‘s the difference between int and INT, long and LONG, etc?
Windows头文件中大写的`INT`、`LONG`等类型与小写的`int`、`long`现在没有区别,两者可互换使用。这源于确保跨平台一致性的需要,现在由于编译器的统一,这种区分已无实际意义。原创 2024-06-04 14:10:50 · 611 阅读 · 0 评论 -
翻译《The Old New Thing》- What’s the difference between the COM and EXE extensions?
COM文件是无结构的原始内存映像,而EXE文件是带有"MZ"头部和其它元数据的结构化程序。操作系统最初根据文件扩展名来区分它们,但后来改为检查MZ头部以提高兼容性,允许COM文件成长为超过64KB而不必重命名为EXE。原创 2024-06-03 10:01:09 · 890 阅读 · 0 评论 -
翻译《The Old New Thing》- What a drag: Dragging a Uniform Resource Locator (URL)
本文介绍了如何在Windows程序中实现拖拽操作,以便同时支持在Internet Explorer和Firefox浏览器中识别URL。通过修改数据对象的剪贴板格式,从`CF_TEXT`更改为`CFSTR_SHELLURL`,使得IE能够识别拖拽的文本为URL。作者承诺将在下一篇文章中展示如何创建一个单一的数据对象,使其能够兼容两个浏览器。原创 2024-06-02 16:25:56 · 788 阅读 · 0 评论 -
翻译《The Old New Thing》- What a drag: Dragging a Uniform Resource Locator (URL) and text
这篇文章主要讲述了如何在Windows编程中实现一个可以同时处理文本和URL数据的拖拽功能,通过扩展数据类型枚举、设置格式等和响应数据请求来实现。原创 2024-06-02 16:19:53 · 707 阅读 · 0 评论 -
翻译《The Old New Thing》- What a drag: Dragging a virtual file (HGLOBAL edition)
文章介绍了实现拖拽虚拟文件的最小必要步骤,使用HGLOBAL作为文件内容的内存块。通过修改枚举数据类型和IDataObject::GetData方法,可创建文件或附件。还讨论了设置文件大小、属性和修改时间等可选特性,以改善用户体验。原创 2024-06-01 06:00:00 · 840 阅读 · 0 评论 -
翻译《The Old New Thing》- What a drag: Dragging a virtual file (IStream edition)
文章介绍了如何在Windows中实现拖拽虚拟文件,以流(IStream)的形式而非内存块(HGLOBAL)。通过修改构造函数和IDataObject::GetData方法,可以创建文件或在Outlook中创建附件。下一篇文章将探讨TYMED_ISTORAGE作为文件传输的存储介质。原创 2024-06-01 05:00:00 · 597 阅读 · 0 评论 -
翻译《The Old New Thing》- Why can‘t I get FormatMessage to load my resource string?
在使用FormatMessage时,常见错误是将字符串资源标识符与消息标识符混淆。正确的做法是使用FORMAT_MESSAGE_FROM_STRING标志,并先通过LoadString加载字符串资源。原创 2024-05-31 08:00:00 · 364 阅读 · 0 评论 -
翻译《The Old New Thing》- Use WM_WINDOWPOSCHANGING to intercept window state changes
WM_WINDOWPOSCHANGING消息允许在窗口状态变更前进行拦截和修改,如阻止调整大小,减少闪烁。正确使用可避免窗口尺寸不当,提升用户体验。原创 2024-05-29 10:24:54 · 291 阅读 · 0 评论 -
翻译《Use FILE_SHARE_DELETE in your shell extension》
本文讨论了文件操作时,FILE_SHARE_DELETE 标志的重要性及 Windows 系统对此问题处理的细节。原创 2024-05-29 06:15:00 · 1407 阅读 · 0 评论 -
翻译《The Old New Thing》- What did MakeProcInstance do?
MakeProcInstance宏在现代Windows中无作用,但在16位Windows中用于生成代码片段(thunk),确保回调函数能访问正确的数据段变量。随着技术进步,此宏变得不必要。原创 2024-05-28 17:58:42 · 1014 阅读 · 0 评论 -
翻译《The Old New Thing》- The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag
文章讨论了使用FormatMessage函数获取Win32错误代码对应的错误消息时,必须使用FORMAT_MESSAGE_IGNORE_INSERTS标志,以避免因消息中的插入序列导致的潜在错误和安全风险。原创 2024-05-25 17:43:29 · 1004 阅读 · 0 评论 -
翻译《The Old New Thing》- What‘s the BS_PUSHLIKE button style for?
BS_PUSHLIKE是一种按钮样式,它使复选框或单选按钮在视觉上看起来像推按钮,但功能上仍然保持原有的行为。尽管外观改变,用户可能会对这种混淆的视觉效果感到困惑。原创 2024-05-24 10:09:30 · 803 阅读 · 0 评论 -
翻译《The Old New Thing》- Why do we even have the DefWindowProc function?
文章讨论了为什么我们有DefWindowProc函数。它解释了如果窗口过程遵循对话框模型,简单地返回FALSE以获得默认处理,那么DefWindowProc函数就没有必要存在。然而,这种模型忽略了派生类使用基类作为子程序的关键模式。文章通过示例代码展示了如何使用DefWindowProc来扩展而非完全覆盖基类行为,以及如何修改消息以自定义默认处理程序的行为。这在面向对象编程中是常见的,允许派生类大部分保持基类的行为。如果没有DefWindowProc,实现这些功能将会更加困难。原创 2024-05-24 16:16:22 · 1030 阅读 · 0 评论 -
翻译《The Old New Thing》- What‘s the difference between LVM_HITTEST and LVM_INSERTMARKHITTEST?
What's the difference between LVM_HITTEST and LVM_INSERTMARKHITTEST? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071024-00/?p=24703Raymond Chen2007年10月24日LVM_HITTEST 和 LVM_INSERTMARKHITTEST 有什么区别?简要文章解释了LVM原创 2024-05-26 07:30:00 · 544 阅读 · 0 评论 -
翻译《The Old New Thing》-Superstition: Why is GetFileAttributes the way old-timers test file existence?
文章讨论了为什么经验丰富的程序员推荐使用GetFileAttributes函数来检测文件是否存在。这是因为在早期的网络环境中,一些网络提供商实现了“数据路径”功能,这可能导致使用传统方法(如尝试打开文件)来检测文件存在时得到错误结果。GetFileAttributes不受数据路径影响,因此提供了一个更可靠的检测方式。尽管现代网络环境中可能不再需要这样做,但出于安全考虑,Windows代码仍然倾向于使用GetFileAttributes。原创 2024-05-25 06:15:00 · 774 阅读 · 0 评论 -
翻译《The Old New Thing》- How do I mark a shortcut file as requiring elevation?
文章介绍了如何通过设置SLDF_RUNAS_USER标志,将快捷方式标记为需要提升权限。提供了一个示例程序,用于修改快捷方式属性,使其以管理员身份运行。同时提醒读者,通常应由程序本身指定提升权限需求。原创 2024-05-23 14:28:00 · 666 阅读 · 0 评论 -
翻译《The Old New Thing》- Book review: Advanced Windows Debugging (Mario Hewardt and Daniel Pravat)
《高级Windows调试》一书由Mario Hewardt和Daniel Pravat撰写,覆盖了从基础到高级的调试任务,包括堆损坏、死锁和CPU使用率问题,适合有经验的开发者深入学习。原创 2024-05-23 14:09:46 · 397 阅读 · 0 评论 -
翻译《The Old New Thing》- If control-specific messages belong to the WM_USER range, why are messages...
文章讨论了为何一些控制特定消息如BM_SETCHECK属于系统消息范围,而通常这些应属于WM_USER范围。原因是为了避免在32位Windows中因地址空间隔离导致跨进程通信时的崩溃问题,所有内置控件的遗留消息被移到系统消息类别,窗口管理器可以正确处理这些消息。原创 2024-05-22 14:14:42 · 982 阅读 · 0 评论 -
翻译《The Old New Thing》- What‘s the difference between EM_UNDO and WM_UNDO?
这应该算是Raymond Chen的一篇水文,正如他所说 “今天的猜测工作:EM_UNDO和WM_UNDO的历史。”原创 2024-05-22 14:04:00 · 251 阅读 · 0 评论 -
翻译《The Old New Thing》- Kernel handles are not reference-counted
内核句柄不使用引用计数管理。复制句柄会增加内核对象的引用计数,每个复制的句柄都需要独立关闭,以减少引用计数。关闭句柄时,它将不再可用。原创 2024-05-21 15:40:52 · 690 阅读 · 0 评论 -
翻译《The Old New Thing》- QueryPerformanceCounter is not a source for unique identifiers
文章讨论了使用QueryPerformanceCounter生成唯一标识符的问题,指出它在单进程内可能产生重复值,不适用于生成全局唯一ID。建议使用InterlockedIncrement64来生成唯一的64位值。原创 2024-05-21 10:34:43 · 643 阅读 · 0 评论 -
翻译《The Old New Thing》- How to check for errors from SetFilePointer
问题在于,你必须以两种不同的方式检查错误,这取决于你是使用32位变体还是64位变体。幸运的是,内核团队意识到他们的聪明反被聪明误,并想出了一个新函数。这个约定的例外是当返回值是模糊的,就像我们在这里有当结果的低阶32位恰好是0xFFFFFFFF。,而不仅仅是当结果的低阶32位恰好是0xFFFFFFFF的时候呢?MSDN中的文档是正确的,但我发现人们更喜欢我以不同的方式重述相同的事实,所以这里是文档的表格版本。我必须承认MSDN中的文档在这一点上可以更清晰,但示例代码希望解决任何悬而未决的歧义。原创 2024-05-20 14:55:33 · 946 阅读 · 0 评论 -
翻译《The Old New Thing》- What is the impact on the Start menu of long-running programs?
在这篇文章中,Raymond Chen解释了开始菜单如何根据用户启动程序的频率来显示程序,并且特别指出了长期运行的程序如何被考虑进去。他提到,即使用户没有频繁重新启动一个程序,只要它连续运行,系统也会每天为其“增加一分”,以确保这些程序在开始菜单中不会被忽略。这样的设计既保持了开始菜单的有用性,又避免了过度强调那些始终在后台运行的程序。原创 2024-05-19 06:45:00 · 288 阅读 · 0 评论 -
翻译《The Old New Thing》- What determines which programs show up on the front page of the Windows XP...
在这篇文章中,Raymond Chen解释了Windows XP开始菜单上显示哪些程序的基本原理,即最近经常使用的程序会被显示在开始菜单的首页上。他提到了开始菜单程序选择的细节是专利申请中的,因此他不能透露太多信息。他还讨论了微调和细节处理的重要性,这些因素共同作用,使得开始菜单上的程序列表更加有用和自然。最后,他以幽默的方式回应了关于软件专利的争议。原创 2024-05-19 06:15:00 · 808 阅读 · 0 评论 -
翻译《The Old New Thing》- Why are console windows limited to Lucida Console and raster fonts?
Raymond Chen详细解释了为什么控制台窗口对字体有限制,特别是等宽字体和支持OEM代码页中所有字符的字体。他讨论了字体中字符的A-和C宽度问题,以及这些问题如何导致渲染问题和用户错误报告。他还提到了Lucida Console字体是经过测试并已知可以在控制台窗口中使用的少数字体之一,并解释了为什么没有提供选择替代字体的接口,因为这可能会导致控制台窗口的显示效果非常糟糕。最后,他提供了一个知识库文章的链接,供那些愿意承担风险的高级用户添加自己的字体到列表中。原创 2024-05-18 06:45:00 · 619 阅读 · 0 评论