Windows Phone Runtime Component 中的類型轉換

Windows Phone Runtime Component 是Windows Phone 平臺用來寫C++類庫的項目類型。c++

主要目的是讓C#和C++進行互操做,引用歷史的C++代碼,保護知識產權,提供性能等。windows

這裏要注意可能會涉及到多種類型系統,分別是:ide

  • 標準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 到charui

    DWORD nWLength = WideCharToMultiByte(CP_OEMCP, NULL, wchar_s, -1, NULL, 0, NULL, FALSE);
    char_s = new char[nWLength];
    DWORD nCLength = WideCharToMultiByte(CP_OEMCP, NULL, wchar_s, -1, char_s, nWLength, NULL, FALSE);

char 到wchar_tspa

    DWORD nWLength = MultiByteToWideChar(CP_ACP, 0, (LPCCH)char_s, -1, NULL, 0);
    wchar_t *pwValue = new wchar_t[nWLength];
    DWORD nCLength = MultiByteToWideChar(CP_ACP, 0, (LPCCH)char_s, -1, pwValue, nWLength);

String^ 到 wchar_t*.net

String::Data()
相關文章
相關標籤/搜索