Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

概述

windows-cj 把庞大的 Windows API 拆分成若干个职责单一的仓颉包。这一节先建立全局视野:你会调用哪些层次的 API,它们分别由哪些包支撑,以及该从哪里入手。

三个层次的 Windows API

Windows 平台的 API 大致分三层,windows-cj 对三者都提供支持:

层次典型代表调用风格
Win32(C 风格)CreateThreadpoolWorkMessageBoxW、注册表函数直接调用导出函数,参数多为指针 / 句柄
COMIUnknownIDXGIFactory、Shell 接口通过虚函数表(vtable)调用,需要 QueryInterface
WinRTWindows.Foundation.Uri、集合、异步在 COM 之上,带运行时类型系统、激活工厂、泛型投影

越往下越底层、越接近裸 ABI;越往上越现代、越贴近仓颉习惯。三层共享同一套底座类型(GUIDHRESULTBOOL、字符串),它们集中在 windows-corewindows-resultwindows-strings 等基础包里。

一张依赖速写

windows-result   ── 错误码 / HRESULT / BOOL / GUID
windows-strings  ── HString / BSTR / PCWSTR / PWSTR
        │
        ▼
windows-core     ── COM 接口底座、vtable、Type 投影、WinRT-ABI 底座
        │
        ├── windows-interface / windows-implement  ── 声明并实现 COM 接口
        ├── windows-collections                    ── WinRT 集合(IVector / IMap …)
        ├── windows-future                         ── WinRT 异步(IAsyncOperation …)
        └── windows-foundation                     ── Foundation 投影(Uri / PropertyValue …)
                │
                ▼
        windows-winui3   ── WinUI 3 / Windows App SDK 支持

windows-bindgen 独立于运行时之外:它是一个命令行工具,按需把元数据生成成仓颉源码包,供上面这些层消费。

我应该从哪里开始?

下一节先把环境装好。