首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于ascii和unicode函数调用的困惑,该如何解决

2012-04-23 
关于ascii和unicode函数调用的困惑struct fileName{charFname[512]fileName *pNext} //用于保存文件名f

关于ascii和unicode函数调用的困惑
struct fileName  
{  
  char Fname[512];  
  fileName *pNext;  
}; //用于保存文件名  
  
fileName *pHead = NULL;  
  
void FindPathFile(char *path)  
{  
  WIN32_FIND_DATA FD;  
  ZeroMemory(&FD,sizeof(WIN32_FIND_DATA)); //清空  
  HANDLE Hand;  
  char FilePath[512];  
  ZeroMemory(FilePath,512);  
  fileName *p = new fileName;  
  ZeroMemory(p,sizeof(fileName));  
  fileName *pTemp = pHead = p;  
  
  strcpy(FilePath,path); //将路径复制给FilePath  
  
  if (FilePath[strlen(FilePath)-1] != '//') //判断最后是不是"/"  
  {  
  strcat(FilePath,"//*"); //要加/*才能浏览本文件夹,注意双引号与单引号  
  }  
  
  Hand = FindFirstFile(FilePath,&FD); //看MSDN  
  
  if (Hand == INVALID_HANDLE_VALUE)  
  {  
  return; //按照路径打开失败,则结束  
  }  
  else  
  while(1)  
  {  
   
  if (FindNextFile(Hand,&FD))  
  {  
  //创建链表保存文件名  
  strcpy(p->Fname,FD.cFileName);  
  p = new fileName;  
  ZeroMemory(p,sizeof(fileName));  
  pTemp->pNext = p;  
  pTemp = p;  
  //cout << FD.cFileName << endl;  
  }  
  else  
  break;  
   
  };  
  
  FindClose(Hand);  
  


我程序现在是unicode编码方式 调用会报错
error C2664: “FindFirstFileW”: 不能将参数 1 从“char [512]”转换为“LPCWSTR”

然后我将FindFirstFile函数写成FindFirstFileA 然后报错
“FindFirstFileA”: 不能将参数 2 从“WIN32_FIND_DATA *”转换为“LPWIN32_FIND_DATAA”

我想的是为什么LPWIN32_FIND_DATAA不默认成为LPWIN32_FIND_DATA 
难道让我把WIN32_FIND_DATA写成WIN32_FIND_DATAA

请各位前辈给解决方法

[解决办法]
把你所有操作串的函数,都是用UNICODE版本,
如:
char 换成 wchar_t 或者 TCHAR
strcpy, strcat也使用UNICODE版本,查MSDN。
等等。。

热点排行