- 标签
- 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
#endifsize_t 类型、指针运算用 uintptr_t, intptr_t, ptrdiff_t、平台无关整型用 int32_t, int64_tsizeof(long double) 是16字节(VC不支持),但是实际使用长度是12字节,4字节填充的是随机数据(绝对大坑)__cplusplus 宏做下判断__APPLE__和 __MACH__(这个没确认)__BORLANDC__、__llvm__、__clang__、__WATCOMC__……
网上偶然拾得本人于 2006 年所写的 MSN Messenger 双/多开工具的源代码。此即时通讯软件早于 2013 年便已停止服务,而今再看昔日所写代码不甚感慨,遂记录于此,以兹纪念