- 标签
- C/C++
libmagic 是由 file 命令提供的一个开源库,用于检测文件的类型,最新版本为 5.46,发布于 2024年 11 月。PyPI 上有一个名为 python-magic-bin 的包提供了编译好的 Windows 二进制版本,然而最后一次更新已是 8 年前。Scoop 的 main 仓库中也包含了一个由第三方编译的 file 命令,版本号为 5.45,但没有提供 libmagic 的动态链接库。此外,5.45 的 Magic 文件版本是 19,而 5.46 已经升级到 20,两者不兼容。看来是时候考虑自己编译一个 Windows 版本了。
……
自 Windows Vista 和 Windows Server 2008 开始,操作系统界面默认的字体为 Segoe UI ,而 Windows XP 及之前的系统界面默认字体为 Tahoma 。不过 Segoe UI 字体的字形并不包含包括汉字在内的东亚文字。中文版 Windows 使用微软雅黑作为默认中文字体。
其他语言的默认字体见下表:
语言 | 字体 |
---|---|
简体中文 | Microsoft YaHei UI |
繁体中文 | Microsoft JhengHei UI |
日文 | Yu Gothic UI |
韩文 | Malgun Gothic |
希伯来文 | Gisha |
泰文 | Leelawadee |
不过相较于查表获取 Windows 系统的默认字体,使用 Windows API 来获取当前系统的默认字体会更加可靠。
……
WIN32
宏来判断是否为 Windows 平台。64位 Windows 也会定义 WIN32
宏,此外还定义 WIN64
宏,有些编译器可能是 Windows
、__WIN32__
、WIN32
、_WIN64
_MSC_VER
宏判断是否是VC编译器__GNUC__
宏来判断是否为 gcc 编译器__declspec(dllimport)
和 __declspec(dllexport)
__attribute__ ((visibility("default")))
来导出函数inline
关键字,要用 __inline
。可以用如下代码定义:C#if defined(_MSC_VER) && !defined(__cplusplus) && !defined(inline)
#define inline __inline
#endif
size_t
类型、指针运算用 uintptr_t
, intptr_t
, ptrdiff_t
、平台无关整型用 int32_t
, int64_t
sizeof(long double)
是16字节(VC不支持),但是实际使用长度是12字节,4字节填充的是随机数据(绝对大坑)__cplusplus
宏做下判断__APPLE__
和 __MACH__
(这个没确认)__BORLANDC__
、__llvm__
、__clang__
、__WATCOMC__
……
网上偶然拾得本人于 2006 年所写的 MSN Messenger 双/多开工具的源代码。此即时通讯软件早于 2013 年便已停止服务,而今再看昔日所写代码不甚感慨,遂记录于此,以兹纪念