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 中的类型转换的更多相关文章

  1. System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....

    #region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ...

  2. FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误

    前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...

  3. JavaScript中数据类型转换总结

    JavaScript中数据类型转换总结 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = " ...

  4. knockoutjs如何动态加载外部的file作为component中的template数据源

    玩过knockoutjs的都知道,有一个强大的功能叫做component,而这个component有个牛逼的地方就是拥有自己的viewmodel和template, 比如下面这样: ko.compon ...

  5. Windows 10 版本 1507 中的新 AppLocker 功能

    要查看 Windows 10 版本信息,使用[运行]> dxdiag  回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...

  6. java中强制类型转换

    在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...

  7. Windows Phone,向localdatabase中插入时间数据出现不能转换的错误

    在开发一个小程序时,使用到了DateTime类型的 DBType, 当向数据库中插入一条信息时,报错说是DateTime类型不能转换. 后来发现是系统给我的DateTime类型的列赋予了个初值,而这个 ...

  8. 将Windows 7导航窗格中的收藏夹、库、家庭组、网络全部去掉

    将Windows 7导航窗格中的收藏夹.库.家庭组.网络全部去掉,只剩下计算机.右键单击ShellFolder,选择权限->Administrators,勾选上“完全控制”,确定后双击右侧窗格中 ...

  9. JS中String类型转换Date类型 并 计算时间差

    JS中String类型转换Date类型 1.比较常用的方法,但繁琐,参考如下:主要使用Date的构造方法:Date(int year , int month , int day)<script& ...

随机推荐

  1. 修改MAC地址的方法(未测试)

    用ioctl控制,通过SIOCGIFHWADDR获取MAC地址,SIOCSIFHWADDR设置MAC地址,不过在设 置MAC地址之前,要先把网卡down掉,设置好了以后,再UP起来. #include ...

  2. jconsole工具使用----jvm内存泄漏问题

    转载地址:https://www.cnblogs.com/baihuitestsoftware/articles/6405580.html Jconsole,Java Monitoring and M ...

  3. POJ 2886 线段树单点更新

    转载自:http://blog.csdn.net/sdj222555/article/details/6878651 反素数拓展参照:http://blog.csdn.net/ACdreamers/a ...

  4. Mysql/Mariadb 升级注意事项

    因需要使用到分区表,在业务不中断的情况下,可以新增分区,需要将原来的Mariadb10.1.25版本升级到Mariadb10.3.8. 1.升级步骤如下 1)新搭建Mariadb10.3.8版本的DB ...

  5. C++ error C2440: “类型转换” : 无法从“std::vector::iterator”转换为“

    原文地址:http://blog.csdn.net/onlyou930/article/details/5602654 圆环套圆环之迭代器 话说这一日是风平浪静,万里乌云,俺的心情好的没得说,收到命令 ...

  6. 在junit中添加fail--有test失败即build Failed

    项目使用jenkins做持续集成,ant来构建,发现在跑junit单元测试的时候,如果有test case失败了,ci的状态是黄色的unstable,而不是红色的failed,看起来很不爽.个人觉得b ...

  7. DevExpress v18.1新版亮点——ASP.NET篇(一)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress ASP.NET v18.1 的新功能,快来下载试用新版本!点 ...

  8. ESET Smart Security 免费60天

    领取地址:http://goo.gl/aEl2Xy 兑换地址:http://goo.gl/h1n62K

  9. 2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践

    博客目录 一.基础问题回答 二.实践内容 1.使用msf编码器msfvenom生成后门程序 2.使用msf编码器msfvenom生成jar文件 3.使用veil-evasion生成后门程序及检测 4. ...

  10. bootstrap在iframe框架中实现由子页面在顶级页面打开模态框(modal)

    我需要完成的效果: 1.在顶级页面打开模态框,并且遮罩层也要再顶级页面 2.单击遮罩层部分,模态框不关闭 问题描述: 不知为什么,可能是bootstrap前端框架添加遮罩层的一些问题.通过子页面在顶级 ...