vc6.0中unicode的有关问题,附源代码

vc6.0中unicode的问题,附源代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <windows.h>
#include <tchar.h>


#define MAX_PHRASE_LEN 8
#define MAX_PY_NUM 420
#define MAX_EACH_PY_NUM 41

typedef struct {
WORD wKey;
TCHAR szPY[8];
} PINYIN,FAR *LPPINYIN;

PINYIN aPYTab[26][MAX_EACH_PY_NUM] = {0};

void LoadHZDictionary( LPCTSTR lpStr)
{//执行一次得到freepy.tab中一行的拼音和给该拼音分配一个键值
TCHAR szPY[20],szHZ[1000];
static int i=0,j=0,nPre=0;
WORD wPYHead=1;
LPPINYIN lpPYTab = (LPPINYIN)aPYTab;

_stscanf(lpStr,"%s %s",szPY,szHZ);

wPYHead=(WORD)szPY[0] - (WORD)_T('a');
if(wPYHead != nPre) j=0;
_tcscpy( (lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->szPY,szPY);
(lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->wKey=i+1;

nPre=wPYHead;
i++,j++;
return;
}

WORD GetSegment(LPTSTR buf)
{
if(*buf == _T('\0')) return 1; //END_SEGMENT
else if(*buf == _T('#')) return 2; //COMMENT
else if( _tcsstr(buf,_T("[PUNCTUATION]")) != NULL ) return 3; 
else if( _tcsstr(buf,_T("[DICTIONARY]")) != NULL) return 4;
else return 0;
}

void GetStr(FILE *pf,LPTSTR pbuf)
{//每执行一次读入一行
while( !feof(pf) ) {
*pbuf = _fgettc(pf);
if(*pbuf == _T('\n')) break;
pbuf++;
}
*pbuf = _T('\0');
}

void LoadTable()
{//将freepy.tab中所有的拼音存到了全局数组aPYTab中
FILE *stream;
TCHAR szStr[1000];
TCHAR szTabFileName[200];
LPTSTR lpTabFileName = szTabFileName;


lpTabFileName += GetSystemDirectory(szTabFileName,200);
if (*(lpTabFileName-1) != _T('\\'))
*lpTabFileName++ = _T('\\');
_tcscpy(lpTabFileName,_T("freepy.tab"));

if( (stream = _tfopen( szTabFileName, "r" )) == NULL ){
_stprintf(szStr,"%s can not found",szTabFileName);
MessageBox(NULL,szStr,"init",MB_OK);
exit(1);
}

while( !feof( stream )) {
GetStr(stream,szStr);

switch( GetSegment(szStr)) {
case 1: //END_SEGMENT
break;

case 2: //COMMENT
break;

case 3: //PUNCTUATION
if( feof( stream ) ) goto my_exit;
GetStr(stream,szStr);
while(GetSegment(szStr) != 1) {
if( GetSegment(szStr) != 2){
//LoadPunct( szStr );
}
if( feof( stream ) ) goto my_exit;
GetStr(stream,szStr);
}
break;

case 4: //DICTIONARY
if( feof( stream ) ) goto my_exit;
GetStr(stream,szStr);
while(GetSegment(szStr) != 1) {
if( GetSegment(szStr) != 2){
LoadHZDictionary( szStr );
}
if( feof( stream ) ) goto my_exit;
GetStr(stream,szStr);
}
break;

default:
break;
}
}
my_exit:
fclose(stream);
return;
}

WORD String2Array(LPTSTR lpBuf,LPTSTR lpStrArr,WORD wMaxArrSize)
{//将freepy.tab中每一行的汉字写入lpStrArr
int i;
WORD cursor=0,count=0,wBufLen;

wBufLen = strlen(lpBuf);

for (i=0;i<wBufLen;i++){
if(*(lpBuf+i) == _T(' ') || *(lpBuf+i) == _T('\t')) {
if(i!=0 && *(lpBuf+i-1)!=_T(' ') && *(lpBuf+i-1)!=_T('\t') ){
_tcsncpy(lpStrArr+count*wMaxArrSize,lpBuf+cursor,i-cursor);
*(lpStrArr+count*wMaxArrSize+i-cursor)=_T('\0');
count++;
}
cursor=i+1;
}
if(i == wBufLen-1 && *(lpBuf+i)!=_T(' ') && *(lpBuf+i)!=_T(' ') ){
_tcsncpy(lpStrArr+count*wMaxArrSize,lpBuf+cursor,i-cursor+1);
*(lpStrArr+count*wMaxArrSize+i-cursor+1)=_T('\0');
count++;
}
}
return count;
}