连接到 WinRT (Windows 运行时) 以便在 Swift 中使用。
调用 Windows 运行时的基本同步调用
import WinRT
do {
RoInitialize()
// https://docs.microsoft.com/en-us/uwp/api/Windows.System.Profile.SystemIdentification?view=winrt-17763
let buffer =
Windows.System.Profile.SystemIdentification.GetSystemIdForPublisher()
// https://docs.microsoft.com/en-us/uwp/api/Windows.Security.Cryptography.CryptographicBuffer?view=winrt-17763
print(Windows.Security.Cryptography.CryptographicBuffer.EncodeToHexString(buffer.Id))
} catch let error {
print(error)
}
调用 Windows 运行时的基本异步调用
import WinRT
@main
struct Asynchronous {
public static func main() async throws {
try RoInitialize()
let controller =
try Windows.System.DispatcherQueueController.CreateOnDedicatedThread()
try await controller.ShutdownQueue()
}
}
1 目前不支持稳定版本,因为它们是从发布分支构建的,而此项目需要 main
分支的最新开发快照。
此项目需要最新的 Swift 快照版本(2021 年 3 月 21 日或更新的版本)。 您可以使用 swift.org 中的快照二进制文件,或者从 Azure 下载每日构建版本。
由于代码与系统代码高度交织,并且调用堆栈在 C++、C 和 Swift 部分之间过度调用,因此 Swift/WinRT 的调试非常复杂。 大多数问题往往发生在系统的 Swift 和 C/C++ 方面之间。 使用 WinDBG 可以最有效地调试它。 以下内容将为 Swift 代码启用 CodeView 调试信息生成,从而在使用 WinDBG 时提供更好的体验
swift build -Xswiftc -g -Xswiftc -debug-info-format=codeview -Xlinker -debug
对于使用 lldb 进行调试,您可以使用以下命令行来确保正确发出 DWARF 数据
swift build -Xlinker -debug:dwarf
这个项目是高度实验性的。 它旨在成为一个试验 COM 接口如何暴露以及 Win/RT 接口的试验场。 它是从 Swift/COM 中获得的经验教训建模而来。
这些文件被分成它们连接的类型的名称,但仅提供最少量的语法糖:通过 WinRT.Error
类型将 HRESULT
返回值映射到 Swift.Error
。 此外,对于有意义的情况,会在单独的文件中添加额外的语法糖,该文件附加了 +Swift
后缀。
长期目标是生成不带后缀的文件,可以通过代码生成或通过改进 Swift 编译器的“ClangImporter”来实现。 成熟的 C++ 支持还应该提供一种更简单的方式,可以通过它来桥接这些类型,而无需通过 C ABI 层。