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& ...
随机推荐
- 微信小程序绑定数据(微信小程序交流群:604788754)
在小程序开发中,用js绑定数据时,明明没报错,但页面没有显示绑定的数据内容.这有可能是相对应的js绑定数据的一些变量名字的问题.遇到这种情况.可以从新建立一个新的demo页面.把问题页面相对应的js. ...
- hdu3874
题解: 和上一题基本相同 插入的时候变一下数值 具体看http://www.cnblogs.com/xuanyiming/p/7921926.html 代码: #include<cstdio&g ...
- hdu 2874 Connections between cities(st&rmq LCA)
Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- Microsoft 数据访问组件 (MDAC) 的版本历史记录
http://support.microsoft.com/kb/231943/zh-cn http://support.microsoft.com/kb/301202
- (C/C++学习笔记) 九. 变量的存储类型
九. 变量的存储类型 ● 变量的存储类型(见附页) ● 注释 ①对于自动变量,它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来,一个 ...
- Linux:at命令详解
at命令 at命令为单一工作调度命令.at命令非常简单,但是在指定时间上却非常强大 语法 at [选项] time at > 执行的命令 ctrl+d 选项 -m :当指定的任务被完成之后,将给 ...
- secureCRT 字体颜色、文件夹和文件显示的颜色
secureCRT菜单栏中选择会话选项 修改显示文件夹和文件显示的颜色 修改字体样式 查看效果
- HDU 4240
http://acm.hdu.edu.cn/showproblem.php?pid=4240 题意:求最大流和流量最大的一条路径的流量的比值 题解:流量最大的路径的流量在dinic的dfs每次搜到终点 ...
- Buildroot Qt 5
/********************************************************************************* * Buildroot Qt 5 ...
- 20155229 2016-2017-2 《Java程序设计》第八周学习总结
20155229 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十四章 NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以设定缓冲区 ...