C++编译器错误:函数声明导致的无意义错误

2024-12-12

一位开发者在C++项目中添加XAML支持时,仅仅包含winrt/Windows.UI.Xaml.h头文件就引发了一系列编译错误。错误源于一个看似正常的函数声明:`template struct consume_Windows_UI_Xaml_IExceptionRoutedEventArgs { [[nodiscard]] auto ErrorMessage() const; };` 实际上,开发者项目中存在一个名为ErrorMessage的宏,与函数名冲突。该宏用于创建ErrorMessageString对象,并返回一个指向错误消息字符串的指针。宏的无边界性导致编译器误将函数声明解释为宏调用,从而产生“参数不足”等错误。解决方法是:在包含头文件之前,使用#pragma undef禁用宏,或直接移除宏,使用内联函数替代。

阅读更多

Windows 95安装程序为何使用三个操作系统?

2024-11-18

Windows 95安装程序之所以使用MS-DOS、Windows 3.1和Windows 95三个操作系统,是为了兼顾从这三个平台进行升级的用户。为了避免编写三个独立的安装程序,Windows 95采用了一种链式安装方式。首先,如果从MS-DOS升级,会安装一个精简的Windows 3.1版本。然后,一个16位Windows程序负责收集用户信息、检测硬件、复制文件和迁移设置。最后,在Windows 95中运行的32位程序完成最后的安装步骤,例如安装打印机。这种方式使代码只需编写一次,即可用于所有升级场景。

阅读更多
未分类

区分大小写,但既非大写也非小写的字符是什么?

2024-11-06

本文探讨了Unicode中一种特殊情况:标题大小写(Title case)。某些Unicode字符,例如dz (U+01F1 LATIN SMALL LETTER DZ),表示两个图形符号的组合,但占用单个代码点。这些字符主要出现在匈牙利语等语言中,被视为字母表中的单个字母。Unicode包含四个这样的双字母组合,它们具有大写、标题大小写和小写三种形式。文章指出,dz双字母组合的存在源于塞尔维亚-克罗地亚语中拉丁字母和西里尔字母的转换需求。文章还讨论了这种特殊字符在文本搜索中可能导致的问题,例如搜索"mad"不会匹配"madzag",因为"dz"被视为单个字母。

阅读更多
未分类 大小写

一个流行但错误的大小写转换方法

2024-10-08

文章指出,逐个字符地将字符串转换为大写或小写是一种流行但错误的方法。因为它没有考虑到字符集、上下文以及字符长度变化等因素。例如,使用`std::tolower`或`std::toupper`无法正确处理UTF-8和UTF-16编码的字符串,并且在某些语言中,大小写转换还会改变字符串长度。文章建议使用`LCMapStringEx`或ICU库中的`u_strToUpper`和`u_strToLower`等函数来进行大小写转换。

阅读更多
未分类 大小写转换

std::monostate 的意义何在?

2024-07-22

std::monostate 是 C++17 中引入的一种类型,它没有任何成员,所有实例都被认为是相等的,其作用是一个占位符类型,用于表示不需要任何值的状态。例如,在 std::variant 中,可以使用 std::monostate 作为初始类型,使其能够在空状态下进行默认构造。

阅读更多
未分类 std::monostate

微软宣布将在Microsoft Teams中停用Office 365连接器

2024-07-09

微软宣布将从2024年8月15日起,逐步停用Microsoft Teams中的Office 365连接器功能,并推荐用户使用Power Automate workflows作为替代方案。Power Automate workflows不仅提供更丰富的连接器目录,还能确保集成架构的灵活性和安全性,满足不断增长的业务需求。文章还提供了从Office 365连接器迁移到Power Automate workflows的详细步骤。

阅读更多

为什么 Alt+9731 有时会显示心形,有时会显示雪人?

2024-07-02

这篇文章探讨了在Windows系统中,使用Alt+数字键输入字符的历史和原因。文章解释说,在IBM PC BIOS中,Alt+数字键的输入方式是将数字作为十进制字节值处理,并从显卡的字符生成器中查找对应的字符。在Windows中,为了与MS-DOS兼容,使用Alt+数字键输入时,数字仍然会在OEM字符集中查找。文章还解释了为什么Alt+9731有时会显示心形,有时会显示雪人,这取决于使用的控件类型。

阅读更多
未分类 字符编码

微软工程博客:写时复制技术的性能与调试

2024-06-24

本文是微软工程博客关于Dev Drive和写时复制(CoW)技术的后续文章。文章首先展示了CoW技术在大型代码库中提升编译速度的测试结果,特别是在C#项目中效果显著。然后,文章讲解了如何判断一个文件是否是CoW链接,以及如何在使用Dev Drive时配合ProcMon和Xperf进行性能分析。最后,文章还提供了解决CoW引用泄漏问题的步骤。

阅读更多

.NET Aspire 正式发布:简化 .NET 云原生开发

2024-05-21

.NET Aspire 是一个新的技术栈,旨在简化 .NET 云原生服务的开发,现已正式发布。它汇集了工具、模板和 NuGet 包,可以更轻松地构建分布式应用程序。Aspire 引入了 App Host 项目,允许开发者使用 C# 描述和配置构成分布式应用程序的各个应用程序项目和托管服务。Aspire 还包括一个基于 Web 的仪表板,用于显示正在运行的应用程序的有用信息,包括 OpenTelemetry 数据。此外,Aspire Components 简化了数据库、消息传递、缓存和云服务的连接,增强了应用程序的弹性和可观察性。

阅读更多
未分类 Aspire