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& ...
随机推荐
- 修改MAC地址的方法(未测试)
用ioctl控制,通过SIOCGIFHWADDR获取MAC地址,SIOCSIFHWADDR设置MAC地址,不过在设 置MAC地址之前,要先把网卡down掉,设置好了以后,再UP起来. #include ...
- jconsole工具使用----jvm内存泄漏问题
转载地址:https://www.cnblogs.com/baihuitestsoftware/articles/6405580.html Jconsole,Java Monitoring and M ...
- POJ 2886 线段树单点更新
转载自:http://blog.csdn.net/sdj222555/article/details/6878651 反素数拓展参照:http://blog.csdn.net/ACdreamers/a ...
- Mysql/Mariadb 升级注意事项
因需要使用到分区表,在业务不中断的情况下,可以新增分区,需要将原来的Mariadb10.1.25版本升级到Mariadb10.3.8. 1.升级步骤如下 1)新搭建Mariadb10.3.8版本的DB ...
- C++ error C2440: “类型转换” : 无法从“std::vector::iterator”转换为“
原文地址:http://blog.csdn.net/onlyou930/article/details/5602654 圆环套圆环之迭代器 话说这一日是风平浪静,万里乌云,俺的心情好的没得说,收到命令 ...
- 在junit中添加fail--有test失败即build Failed
项目使用jenkins做持续集成,ant来构建,发现在跑junit单元测试的时候,如果有test case失败了,ci的状态是黄色的unstable,而不是红色的failed,看起来很不爽.个人觉得b ...
- DevExpress v18.1新版亮点——ASP.NET篇(一)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress ASP.NET v18.1 的新功能,快来下载试用新版本!点 ...
- ESET Smart Security 免费60天
领取地址:http://goo.gl/aEl2Xy 兑换地址:http://goo.gl/h1n62K
- 2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
博客目录 一.基础问题回答 二.实践内容 1.使用msf编码器msfvenom生成后门程序 2.使用msf编码器msfvenom生成jar文件 3.使用veil-evasion生成后门程序及检测 4. ...
- bootstrap在iframe框架中实现由子页面在顶级页面打开模态框(modal)
我需要完成的效果: 1.在顶级页面打开模态框,并且遮罩层也要再顶级页面 2.单击遮罩层部分,模态框不关闭 问题描述: 不知为什么,可能是bootstrap前端框架添加遮罩层的一些问题.通过子页面在顶级 ...