关于MFC项目编码有关问题

关于MFC项目编码问题
下面的代码项目编码是多字节,现在要转成unicode编码,

int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, result, strlen( result), NULL, 0); 
报错
 “strlen”: 不能将参数 1 从“CString”转换为“const char *”
还有,不能将参数 3 从“CString”转换为“LPCSTR”

for (p=strtok(str,_T(";"));p!=NULL;p=strtok(NULL,_T(";")))处
报错“strtok”: 不能将参数 1 从“wchar_t *”转换为“char *”
不能将参数 2 从“const wchar_t [2]”转换为“const char *”
求大神???新手,希望详细点


CStdioFile file;
CString filePathName;
int row;
CString result;


//生成一个对话框
lpszOpenFile = new CFileDialog
(TRUE,L"",L"",OFN_FILEMUSTEXIST |OFN_HIDEREADONLY , L"文件类型(*.txt)|*.txt|所有文件(*.*)|*.*|");

if(lpszOpenFile->DoModal() == IDOK )//假如点击对话框确定按钮
{
filePathName = lpszOpenFile->GetPathName();//得到打开文件的路径
SetWindowText(filePathName);//在窗口标题上显示路径
}

if(filePathName == "")  return;

if(!file.Open(filePathName,CFile::modeRead))
{
MessageBox(L"can not open file!");
return;
}


CString strLine,strTemp;
row = 0;
while(file.ReadString(strLine))
{
wchar_t *str = strLine.GetBufferSetLength(strLine.GetLength());
char *p;

if(strLine!=_T(""))
{
for (p=strtok(str,_T(";"));p!=NULL;p=strtok(NULL,_T(";")))
{
strTemp = p;
result+=strTemp;

}
row ++;
}
}
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, result, strlen( result), NULL, 0); 
    //分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间 
    wchar_t* wszString = new wchar_t[wcsLen + 1]; 
    //转换 
    ::MultiByteToWideChar(CP_UTF8, NULL,  result, strlen( result), wszString, wcsLen); 
    //最后加上'\0' 
    wszString[wcsLen] =_T('\0'); 
    //unicode版的MessageBox API 
    ::MessageBoxW(GetSafeHwnd(), wszString, wszString, MB_OK); 

delete lpszOpenFile;//释放分配的对话框

------解决方案--------------------
老兄,基础知识要温故一下咯。
“strlen”: 不能将参数 1 从“CString”转换为“const char *”  -- 这个当然不行咯,直接用GetLength方法
还有,不能将参数 3 从“CString”转换为“LPCSTR”  -- 还是类型的问题,用GetBuffer。

都不知道你这里的CString到底是不是unicode的。。。
------解决方案--------------------
最简单的解决办法:

在工程项目属性中
将 字符集(Character Set)由Use Unicode Character Set改为Use Multi-Byte Character Set