worldsite / blog.sc

Blogging soul chat, stay cool. via: https://blog.sc
3 stars 0 forks source link

UWP开发指南 #47

Open suhao opened 1 year ago

suhao commented 1 year ago

UWP开发指南

现有工程是基于C++开发的,这里主要讨论C++库,以及基于C++的UWP移植和方案处理。

UWP是微软近些年大力打造的一个支持多设备、多CPU架构、多语言等可以运行在Win10系统的一个通用平台。在这个平台上微软加强了安全性、软件规范性,同时软件必须要经过微软商店的评审,很大程度上保证了软件的质量。

在此平台上,微软摈弃了历史悠久的Win32运行时库,转而提供一个全新的Windows运行时库,被称之为WinRT。WinRT的强大之处在于,它并不限制某一种语言,就目前来说它支持的语言有以下几种

同时,我们还可以使用多种语言来创建我们自己的WinRT库,来满足软件模块复用的需求。对于C++来说,共有三种模块可选择

C++/WinRT,该方案支持完全以C++17的语法来编写代码以及调用WinRT的API,但是如果想要创建一个新的WinRT运行时组件,那么就需要把Lyra的导出类和接口都定义为一个IDL文件,然后由必要的WinRT工具生产相应的实现类来进行导出功能。工程量依然巨大和复杂。C++/CX WinRT,该方案则需要使用CX的语法来将功能导出,同样工程量不小。

UWP模块,该方案可以直接使用现有的C++代码,导出方式也和传统的Win32DLL一致,需要注意的是,某些Win32函数将不再支持,因此,移植的工作就是查看哪些函数不能在UWP环境下运行,然后在WinRT中找到替代方案来代替它。

开发实践

1. 安装包的自定义配置

DISM全称是Deployment Image Servicing and Management,一个命令行的部署映像服务和管理工具。针对特殊的渠道版本,需要附带自定义配置信息,可以利用Preinstall Apps Using DISM中的Use custom data files来实现。

DISM会在App的安装目录下生成的Custom.data文件,文件的格式可以自定义,文件名和内容生成无法修改,后续用户通过商店升级APP后,这个文件也不会丢失。直到用户卸载App时被一起移除,开发者可以将文件放到Appx/microsoft.system.package.metadata目录下(microsoft.system.package.metadata为隐藏目录),来调试自定义配置的定制版本功能。

2. 与网页的交互

参考:https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/web-view

可以通过使用InvokeScriptAsync来调用或注入脚本到webview,通过ScriptNotify 事件从 webview获取信息。

3. UWP开发的Visual studio插件推荐

UWP开发涉及很多UI布局文件,为便于协作和防止xaml文件的冲突,建议安装xaml styler插件,统一xaml格式,减少文件修改的冲突发生。安装后修改XAML Styler配置,Keep first attribute on same line设置为true,Format XAML on save改为false

4. 资源管理