Windows Phone Runtime Component 中的类型转换
Windows Phone Runtime Component 是Windows Phone 平台用来写C++类库的项目类型。
主要目的是让C#和C++进行互操作,引用历史的C++代码,保护知识产权,提供性能等。
这里要注意可能会涉及到多种类型系统,分别是:
- 标准C++类型系统。可能很少会用到,但也难免。如:char, bool, int 等。
- 微软Win32类型系统。都是一些宏定义,看着就烦。如:TCHAR, CHAR, LPSTR 等。
- 微软Windows Runtime类型系统。为了在C++/CX和C#/.NET之间交互的通信类型。如:HSTRING等。
- C++/CX类型系统:微软用于开发商店应用和手机应用的C++语言系统。例如:UInt8等。
- C#/.NET类型系统。虽然CLR和C#的类型描述不大一样,但基本是100%映射的。
| C# | .net CLR | std c++ | c++/cx | windows runtime | win32 | Length |
| bool | Boolean | bool | bool | Boolean | 1 | |
| byte | Byte | char | char | Char | CHAR | 8 |
| char | Char | __wchar_t | char16 | Char16 | wchar_t | 16 |
| short | Int16 | short | int16 | Int16 | 16 | |
| ushort | Int32 | unsigned short | uint16 | UInt16 | WORD | 16 |
| int | Int32 | int | int | Int32 | 32 | |
| uint | UInt32 | unsigned int | uint32 | UInt32 | DWORD | 32 |
| long | Int64 | long long | int64 | Int64 | 64 | |
| ulong | UInt64 | unsigned long long | uint64 | UInt64 | DWORD64 | 64 |
| float | Single | float | float32 | Single | FLOAT | |
| double | UInt64 | double | float64 | Double | ||
| string | String | std:wstring, L"" | String^ | HSTRING | ||
最常见的是C++代码中的字符串都是单字节的,如 char等,而要与C#中的双字节字符串交互,就必须在单字节和双字节之间做转换。当然还有其他类型的转换。
wchar_t 到char
DWORD nWLength = WideCharToMultiByte(CP_OEMCP, NULL, wchar_s, -, NULL, , NULL, FALSE);
char_s = new char[nWLength];
DWORD nCLength = WideCharToMultiByte(CP_OEMCP, NULL, wchar_s, -, char_s, nWLength, NULL, FALSE);
char 到wchar_t
DWORD nWLength = MultiByteToWideChar(CP_ACP, , (LPCCH)char_s, -, NULL, );
wchar_t *pwValue = new wchar_t[nWLength];
DWORD nCLength = MultiByteToWideChar(CP_ACP, , (LPCCH)char_s, -, pwValue, nWLength);
String^ 到 wchar_t*
String::Data()
Windows Phone Runtime Component 中的类型转换的更多相关文章
- System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....
#region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ...
- FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误
前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...
- JavaScript中数据类型转换总结
JavaScript中数据类型转换总结 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = " ...
- knockoutjs如何动态加载外部的file作为component中的template数据源
玩过knockoutjs的都知道,有一个强大的功能叫做component,而这个component有个牛逼的地方就是拥有自己的viewmodel和template, 比如下面这样: ko.compon ...
- Windows 10 版本 1507 中的新 AppLocker 功能
要查看 Windows 10 版本信息,使用[运行]> dxdiag 回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...
- java中强制类型转换
在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...
- Windows Phone,向localdatabase中插入时间数据出现不能转换的错误
在开发一个小程序时,使用到了DateTime类型的 DBType, 当向数据库中插入一条信息时,报错说是DateTime类型不能转换. 后来发现是系统给我的DateTime类型的列赋予了个初值,而这个 ...
- 将Windows 7导航窗格中的收藏夹、库、家庭组、网络全部去掉
将Windows 7导航窗格中的收藏夹.库.家庭组.网络全部去掉,只剩下计算机.右键单击ShellFolder,选择权限->Administrators,勾选上“完全控制”,确定后双击右侧窗格中 ...
- JS中String类型转换Date类型 并 计算时间差
JS中String类型转换Date类型 1.比较常用的方法,但繁琐,参考如下:主要使用Date的构造方法:Date(int year , int month , int day)<script& ...
随机推荐
- 微信小程序 -- 数据请求
微信小程序 -- 数据请求 微信小程序请求数据,并不是一个可以在url打开有数据就可以拿到数据那么简单 浏览器地址输入 可以获取参数的url 微信小程序中 代码展示 wxml <view> ...
- sgu106.The equation 拓展欧几里得 难度:0
106. The equation time limit per test: 0.25 sec. memory limit per test: 4096 KB There is an equation ...
- 关于双网卡双宽带Http及Socks代理的配置
1.[硬件环境] a, 1台宿主(win7)+几十台虚拟机(xp)(vm10的版本,估计可打开52台以上的虚拟机) b, 双网卡,其中一个网卡通过路由连接电信ADSL,一个直连集线器,可直接连接移动m ...
- glusterfs分布式存储
一,分布式文件系统理论基础 1.1 分布式文件系统出现 计算机通过文件系统管理,存储数据,而现在数据信息爆炸的时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量 ...
- bzoj1648
题解: 简单灌水 然后统计一下 代码: #include<bits/stdc++.h> using namespace std; ; int ne[N],num,fi[N],n,k,m,x ...
- hibernate 各种主键生成策略(转)
http://www.cnblogs.com/kakafra/archive/2012/09/16/2687569.html 1.assigned 主键由外部程序负责生成,在 save() 之前必须指 ...
- Installing MIB in Ubuntu and Solving the Error “SNMP Cannot Find Module …”
Has noticed an error after executing the command snmpwalk with the indication of MIB instead of OID: ...
- utf-8和Unicode的区别
链接 utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由. 众 ...
- IOS工作中的问题(转)
1.UITableView的scrollDelegate问题 下午遇到一个奇怪的问题,之前都没有注意过,由于A VC中要实现tableView和其他View位置的联动,所以实现了tableView的d ...
- JQuery - Tab Control
http://jqueryui.com/tabs/ <!doctype html> <html lang="en"> <head> <me ...