Windows Store 平台移植 —— (3) 补充基础功能 API
2013-11-19 16:57
543 查看
常用的基础功能 API 包括:
内存管理
内存映射
调试输出
系统信息
时间
环境变量
字符集
动态库管理
下列 API 在 Windows Store 环境下缺失:
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)。
内存管理
内存映射
调试输出
系统信息
时间
环境变量
字符集
动态库管理
下列 API 在 Windows Store 环境下缺失:
缺失API | 实现方法 | 说明 |
LocalAlloc | new [] | 对原有功能进行简化 |
LocalFree | delete [] | |
CreateFileMappingW | CreateFileMappingFromApp | |
CreateFileMappingA | CreateFileMappingW | |
OpenFileMappingW | CreateFileMappingW | 利用CreateFileMappingW的打开现有文件映射功能 |
OpenFileMappingA | OpenFileMappingW | |
MapViewOfFile | MapViewOfFileFromApp | |
MapViewOfFileEx | MapViewOfFileFromApp | 不能支持固定地址映射 |
VirtualAlloc | 通过文件映射分配虚拟地址空间 | |
VirtualFree | UnmapViewOfFile | |
FormatMessageA | FormatMessageW | 不支持FORMAT_MESSAGE_ALLOCATE_BUFFER |
OutputDebugStringA | OutputDebugStringW | |
GetTickCount | GetTickCount64 | |
GetSystemInfo | GetNativeSystemInfo | |
GetEnvironmentStrings | 自行实现 | |
GetEnvironmentVariable | 自行实现 | |
SetEnvironmentVariable | 自行实现 | |
LCMapStringA | LCMapStringEx | |
LCMapStringA | LCMapStringW | 需要注意LCMAP_SORTKEY |
GetStringTypeExA | GetStringTypeExW | |
FileTimeToLocalFileTime | 通过多个时间转换 API 实现 | |
GetModuleHandleW | LoadPackagedLibrary | |
GetModuleHandleA | GetModuleHandleW | |
LoadLibraryW | LoadPackagedLibrary | |
LoadLibraryA | LoadLibraryW | |
GetModuleFileNameW | Windows::ApplicationModel::Package | 只支持hModule==NULL情形 |
GetModuleFileNameA | GetModuleFileNameW |
因为 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 平台移植 —— (4) 补充文件系统 API
- Windows Store 平台移植 —— (5) 补充线程相关 API
- Windows Store 平台移植 —— (6) 补充网络 API
- Windows Store 平台移植 —— (7) 网络 API
- Windows Store 平台移植 —— (8)C,C++库构建
- 将EasyRTMP_RTSP移植到Android平台实现的RTSP拉流转推RTMP直播流功能
- Google Buzz推出转发功能、全平台移动版和API
- Python平台下调用阿里云API参数实现DDNS功能
- Android平台开发-WIFI function porting-WIFI功能移植
- 007-Android平台开发-SD function porting-SD功能移植
- Linux平台,使用JavaComm3 API及SMSLib项目实现在Web Application中发送手机短信的功能
- Android平台开发-WIFI function porting-WIFI功能移植
- Windows Store 平台移植 —— (2) 了解开发环境
- linux基础编程 链路层socket 摆脱winPcap 夸网段socket通信 可夸平台移植
- Windows Store 平台移植 —— (9) Runtime 接口实现
- Google Buzz推出转发功能、全平台移动版和API
- javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)
- Android平台开发-Bluez function porting-蓝牙功能移植
- Android平台开发-Bluez function porting-蓝牙功能移植
- U-boot移植 (v2012.04.1 S3C2440平台) (四) usbslave 下载功能实现