Ejemplo n.º 1
0
LPSTR UnicodeToXEx(DWORD codePage,const LPWSTR source,int size)
{
    if (size == -1)
        size=lstrlenW(source);
    int destSize=UnicodeToX(codePage,source,size,NULL,0);
    if (destSize > 0)
    {
        destSize+=sizeof(BYTE);
        LPSTR dest=(LPSTR)_alloc(destSize*sizeof(BYTE));
        if (dest)
        {
            UnicodeToX(codePage,source,size,dest,destSize);
            return dest;
        }
    }
    return NULL;
}
Ejemplo n.º 2
0
SYSLIBFUNC(DWORD) StrUtf8ToAnsi(LPCSTR lpSource,DWORD dwSourceSize,LPSTR lpDest,DWORD dwDestSize)
{
    DWORD dwRet=0;
    do
    {
        DWORD dwUniLen;
        LPWSTR lpSourceW=StrUtf8ToUnicodeEx(lpSource,dwSourceSize,&dwUniLen);
        if (!lpSourceW)
            break;

        dwRet=UnicodeToX(1251,lpSourceW,dwUniLen,lpDest,dwDestSize);;
        MemFree(lpSourceW);
    }
    while (false);
    return dwRet;
}
Ejemplo n.º 3
0
SYSLIBFUNC(DWORD) StrUnicodeToUtf8(LPCWSTR lpSource,DWORD dwSourceSize,LPSTR lpDest,DWORD dwDestSize)
{
    DWORD dwRet=0;
    do
    {
        if (!SYSLIB_SAFE::CheckStrParamW(lpSource,dwSourceSize))
            break;

        if (!dwDestSize)
            dwDestSize=lstrlenW(lpSource)+1;

        if (!SYSLIB_SAFE::CheckParamWrite(lpDest,dwDestSize))
            break;

        dwRet=UnicodeToX(CP_UTF8,lpSource,dwSourceSize,lpDest,dwDestSize);
    }
    while (false);
    return dwRet;
}
Ejemplo n.º 4
0
SYSLIBFUNC(DWORD) StrUnicodeToAnsi(LPCWSTR lpSource,DWORD dwSourceSize,LPSTR lpDest,DWORD dwDestSize)
{
    DWORD dwRet=0;
    do
    {
        if (!SYSLIB_SAFE::CheckStrParamW(lpSource,dwSourceSize))
            break;

        if (!dwDestSize)
            dwDestSize=lstrlenW(lpSource)+1;

        if (!SYSLIB_SAFE::CheckParamWrite(lpDest,dwDestSize))
            break;

        dwRet=UnicodeToX(1251,lpSource,dwSourceSize,lpDest,dwDestSize,WC_COMPOSITECHECK);
    }
    while (false);
    return dwRet;
}
Ejemplo n.º 5
0
SYSLIBFUNC(LPSTR) StrUnicodeToAnsiEx(LPCWSTR lpSource,DWORD dwSourceSize,LPDWORD lpOutSize)
{
    LPSTR lpOut=NULL;
    do
    {
        if (!SYSLIB_SAFE::CheckStrParamsExW(lpSource,dwSourceSize,&lpOutSize))
            break;

        if (!dwSourceSize)
        {
            dwSourceSize=lstrlenW(lpSource);
            if (!dwSourceSize)
                break;
        }

        DWORD dwRequedSize=UnicodeToX(1251,lpSource,dwSourceSize,NULL,0,WC_COMPOSITECHECK);
        if (!dwRequedSize)
            break;

        lpOut=(LPSTR)MemQuickAlloc(dwRequedSize+1);
        if (!lpOut)
            break;

        DWORD dwOutSize=StrUnicodeToAnsi(lpSource,dwSourceSize,lpOut,dwRequedSize);
        if (dwOutSize)
        {
            if (lpOutSize)
                *lpOutSize=dwOutSize;

            lpOut[dwOutSize]=0;
            break;
        }

        MemFree(lpOut);
        lpOut=NULL;
    }
    while (false);
    return lpOut;
}
Ejemplo n.º 6
0
int UnicodeToAnsi(const LPWSTR source,int sourceSize,LPSTR dest,int destSize)
{
    return UnicodeToX(1251,source,sourceSize,dest,destSize);
}