using System;
using System.Runtime.InteropServices;
using System.Text;
class HkscsHelper
{
const uint HKSCS_ERR_INVALID_CHARS = 0x00000001;
[DllImport("hkscs04.dll")]
public static extern int HKSCS_Big5ToUnicode41(
uint dwFlags,
[In][MarshalAs(UnmanagedType.LPStr)]string lpBig5Str, int cbBig5,
[Out][MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpUnicode41Str,
int cchUnicode41);
[DllImport("hkscs04.dll")]
public static extern int HKSCS_PUAToUnicode41(
[In][MarshalAs(UnmanagedType.LPWStr)]string lpPUAStr, int cchPUA,
[Out][MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpUnicode41Str,
int cchUnicode41);
public static string ConvertBig5(string srcString)
{
int srcLen = Encoding.GetEncoding(950).GetByteCount(srcString);
int len = HKSCS_Big5ToUnicode41(HKSCS_ERR_INVALID_CHARS,
srcString, srcLen, null, 0);
StringBuilder sb = new StringBuilder(len);
len = HKSCS_Big5ToUnicode41(HKSCS_ERR_INVALID_CHARS,
srcString, srcLen, sb, len);
return sb.ToString().Substring(0, len);
}
public static string ConvertPua(string srcString)
{
int srcLen = srcString.Length;
int len = HKSCS_PUAToUnicode41(srcString, srcLen, null, 0);
var sb = new StringBuilder(len);
len = HKSCS_PUAToUnicode41(srcString, srcLen, sb, len);
return sb.ToString().Substring(0, len);
}
}