Windows Store 平台移植 —— (3) 补充基础功能 API
来源:互联网 发布:最优化方法答案施光燕 编辑:程序博客网 时间:2024/06/08 01:25
常用的基础功能 API 包括:
- 内存管理
- 内存映射
- 调试输出
- 系统信息
- 时间
- 环境变量
- 字符集
- 动态库管理
下列 API 在 Windows Store 环境下缺失:
缺失API实现方法说明LocalAllocnew []对原有功能进行简化LocalFreedelete [] CreateFileMappingWCreateFileMappingFromApp CreateFileMappingACreateFileMappingW OpenFileMappingWCreateFileMappingW利用CreateFileMappingW的打开现有文件映射功能OpenFileMappingAOpenFileMappingW MapViewOfFileMapViewOfFileFromApp MapViewOfFileExMapViewOfFileFromApp不能支持固定地址映射VirtualAlloc 通过文件映射分配虚拟地址空间VirtualFreeUnmapViewOfFile FormatMessageAFormatMessageW不支持FORMAT_MESSAGE_ALLOCATE_BUFFEROutputDebugStringAOutputDebugStringW GetTickCountGetTickCount64 GetSystemInfoGetNativeSystemInfo GetEnvironmentStrings 自行实现GetEnvironmentVariable 自行实现SetEnvironmentVariable 自行实现LCMapStringALCMapStringEx LCMapStringALCMapStringW需要注意LCMAP_SORTKEYGetStringTypeExAGetStringTypeExW FileTimeToLocalFileTime 通过多个时间转换 API 实现GetModuleHandleWLoadPackagedLibrary GetModuleHandleAGetModuleHandleW LoadLibraryWLoadPackagedLibrary LoadLibraryALoadLibraryW GetModuleFileNameWWindows::ApplicationModel::Package只支持hModule==NULL情形GetModuleFileNameAGetModuleFileNameW- OpenFileMapping
因为 CreateFileMapping 可以打开已存在的文件映射,所以 OpenFileMapping 可以通过 CreateFileMapping 实现,如果 CreateFileMapping 有错误 ERROR_ALREADY_EXISTS,应该清除该错误。
- MapViewOfFileEx
MapViewOfFileFromApp 不支持固定地址映射,所以 MapViewOfFileEx 的 lpBaseAddress 参数必须为 NULL,好在固定地址映射并不常用。
- VirtualAlloc
这个 API 通过用文件映射实现,尽管有点大材小用。实现 VirtualAlloc,需要先创建文件映射,然后映射到虚拟地址,再关闭文件映射句柄。(CreateFileMapping + MapViewOfFile + CloseHandle),根据 MSDN 文档的说法,关闭文件映射句柄不影响映射内存有效性。
- FormatMessageA
在 Windows Store 环境中, FormatMessageA 的 UNICODE 版本 FormatMessageW 可以调用,但是 FORMAT_MESSAGE_ALLOCATE_BUFFER 标志位无效,所以要自己声请内存。
- GetEnvironmentStrings
- GetEnvironmentVariable
- SetEnvironmentVariable
Windows Store 没有环境变量相关的 API 可用,好在没有多少程序必须要用到环境变量,一般作为可选的外部配置项使用,因此可用构建一个自定义的环境变量集合来实现这些 API。常用的环境变量有 TMP(临时目录)。
- LCMapString
Windows Store 有 LCMapStringEx 可用。需要注意的是,当 LCMAP_SORTKEY 标志位设置时,作为返回的 lpDestStr 内容填充的不是字符数据,在 ASCII 版本的实现中不需要做字符集转换。
- FileTimeToLocalFileTime
通过 FileTimeToSystemTime、SystemTimeToTzSpecificLocalTime、SystemTimeToFileTime 三次时间转换实现。
- GetModuleHandle
- LoadLibrary
Windows Store 加载链接库需要使用 LoadPackagedLibrary。GetModuleHandle 的 UINCODE、ASCII 版本,以及 LoadLibrary 的 UINCODE、ASCII 版本都可以通过该 API 实现。
- GetModuleFileName
GetModuleFileName 一般用来获取本进程的可执行文件路径名,此时参数 hModule 为 NULL。在 Windows Store 中,可执行文件路径其实是安装目录(Windows::ApplicationModel::Package::Current->InstalledLocation->Path)加上安装包名称(Windows::ApplicationModel::Package::Current->Id->Name)。
- Windows Store 平台移植 —— (3) 补充基础功能 API
- Windows Store 平台移植 —— (4) 补充文件系统 API
- Windows Store 平台移植 —— (5) 补充线程相关 API
- Windows Store 平台移植 —— (6) 补充网络 API
- Windows Store 平台移植 —— (7) 网络 API
- Windows Store 平台移植 —— (1) 序言
- Windows Store 平台移植 —— (10) 回顾
- Windows Store 平台移植 —— (2) 了解开发环境
- Windows Store 平台移植 —— (8)C,C++库构建
- Windows Store 平台移植 —— (9) Runtime 接口实现
- Windows Store的媒体基础API
- 跨平台移植 linux<—>windows
- LTE-SIM平台——linux移植到Windows
- Exynos4412 Uboot 移植(六)—— 相关知识补充
- Exynos4412 Uboot 移植(六)—— 相关知识补充
- Exynos4412 Uboot 移植(六)—— 相关知识补充
- Exynos4412 Uboot 移植(六)—— 相关知识补充
- windows到linux——移植新浪微博开放平台客户端(c++)到linux
- android 疑难杂症 综合
- spring+mybatis利用interceptor(plugin)兑现数据库读写分离
- 表达式求值(二)
- 【Cocos2d-x 3.0学习笔记】coco2d-s 读取plist 文件报错
- Android不同版本的Dialog的行为不同
- Windows Store 平台移植 —— (3) 补充基础功能 API
- 【ios 模块1】zip Unzip 方法以及其中的坑
- python namedtuple
- yii 数据排序
- Windows Store 平台移植 —— (4) 补充文件系统 API
- 关于使用反射无法取得部分注解
- Android基础之Content Provider
- 一条sql语句解决一个变态需求
- c语言 猜数字大小游戏