StringBuilder和Char[]在平台调用中的差异
生活随笔
收集整理的這篇文章主要介紹了
StringBuilder和Char[]在平台调用中的差异
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
StringBuilder和Char[]在平臺(tái)調(diào)用中的差異如下:
示例一:
BOOL GetUserPreferredUILanguages(__in DWORD dwFlags,
__out PULONG pulNumLanguages,
__out_opt PZZWSTR pwszLanguagesBuffer,
__inout PULONG pcchLanguagesBuffer
);
由于pwszLanguagesBuffer中接收的是以2個(gè)'\0'結(jié)尾的多個(gè)字符串集合,因此應(yīng)該使用Char[]類型。
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]private static extern Boolean GetUserPreferredUILanguages(
UInt32 dwFlags,
out Int32 pulNumLanguages,
[Out] Char[] pwszLanguagesBuffer,
ref Int32 pcchLanguagesBuffer
);
/// <summary>
/// 獲取用戶偏好的界面語言
/// </summary>
/// <param name="dwFlags">
/// MUI_LANGUAGE_ID = 4:語言ID
/// MUI_LANGUAGE_NAME = 8:語言名稱
/// </param>
/// <returns>偏好的語言集合</returns>
public static String[] GetUserPreferredUILanguages(UInt32 dwFlags = MUI_LANGUAGE_NAME)
{
// 計(jì)算需要的空間大小
Int32 NumLanguages;
Int32 cchLanguagesBuffer = 0;
if (GetUserPreferredUILanguages(dwFlags, out NumLanguages, null, ref cchLanguagesBuffer))
{
if (NumLanguages > 0)
{ // 獲取實(shí)際的數(shù)據(jù)
Char[] LanguagesBuffer = new Char[cchLanguagesBuffer];
GetUserPreferredUILanguages(dwFlags, out NumLanguages, LanguagesBuffer, ref cchLanguagesBuffer);
// 提取所有的語言
return new String(LanguagesBuffer).TrimEnd('\0').Split('\0');
}
}
return null;
}
示例二:
int GetUserDefaultLocaleName(__out LPWSTR lpLocaleName,
__in int cchLocaleName
);
使用StringBuilder:
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]private static extern Int32 GetUserDefaultLocaleName([Out] StringBuilder lpLocaleName, Int32 cchLocaleName);
public const Int32 LOCALE_NAME_MAX_LENGTH = 85;
/// <summary>
/// 獲取用戶缺省本地語言名稱
/// </summary>
/// <returns>本地語言名稱</returns>
public static String GetUserDefaultLocaleName()
{
StringBuilder lpLocaleName = new StringBuilder(LOCALE_NAME_MAX_LENGTH);
if (GetUserDefaultLocaleName(lpLocaleName, LOCALE_NAME_MAX_LENGTH) > 0)
{
return lpLocaleName.ToString();
}
return null;
}
使用Char[],轉(zhuǎn)換成String類型時(shí)需要消除垃圾字符:
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]private static extern Int32 GetUserDefaultLocaleName([Out] Char[] lpLocaleName, Int32 cchLocaleName);
public const Int32 LOCALE_NAME_MAX_LENGTH = 85;
/// <summary>
/// 獲取用戶缺省本地語言名稱
/// </summary>
/// <returns>本地語言名稱</returns>
public static String GetUserDefaultLocaleName()
{
Char[] lpLocaleName = new Char[LOCALE_NAME_MAX_LENGTH];
Int32 Length = GetUserDefaultLocaleName(lpLocaleName, LOCALE_NAME_MAX_LENGTH);
if (Length > 0)
{
return new String(lpLocaleName, 0, Length - 1);
}
return null;
}
本文編輯:插秧機(jī) www.cgjfg.com?。
轉(zhuǎn)載于:https://www.cnblogs.com/seoer/archive/2011/12/13/2285970.html
總結(jié)
以上是生活随笔為你收集整理的StringBuilder和Char[]在平台调用中的差异的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全面认识UML类图元素
- 下一篇: postfix过滤器名称不一致导致pos