源程序如下:#include <windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,int nShowCmd)
{
    HANDLE hFile;
LPTSTR IpBuffer="Hello World!";
hFile=CreateFile("C:\\File.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
CloseHandle(hFile);
TCHAR szBuf(128);
DWORD dwRead;
DWORD dwWritten;
hFile=CreateFile("C:\\File.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(hFile,IpBuffer,strlen(IpBuffer)+1,&dwRead,NULL);
SetFilePointer(hFile,0,NULL,FILE_BEGIN);
if(ReadFile(hFile,szBuf,strlen(IpBuffer)+1,&dwWritten,NULL))
{
MessageBox(NULL,szBuf,"EXAM",MB_OK);
}
CloseHandle(hFile);
}正在编译...
p35.cpp
c:\documents and settings\true\my documents\visual studio 2005\projects\p35\p35\p35.cpp(6) : error C2440: “初始化”: 无法从“const char [13]”转换为“LPTSTR”
        与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
c:\documents and settings\true\my documents\visual studio 2005\projects\p35\p35\p35.cpp(7) : error C2664: “CreateFileW”: 不能将参数 1 从“const char [12]”转换为“LPCWSTR”
        与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
c:\documents and settings\true\my documents\visual studio 2005\projects\p35\p35\p35.cpp(12) : error C2664: “CreateFileW”: 不能将参数 1 从“const char [12]”转换为“LPCWSTR”
        与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
c:\documents and settings\true\my documents\visual studio 2005\projects\p35\p35\p35.cpp(13) : error C2664: “strlen”: 不能将参数 1 从“LPTSTR”转换为“const char *”
        与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
c:\documents and settings\true\my documents\visual studio 2005\projects\p35\p35\p35.cpp(15) : error C2664: “strlen”: 不能将参数 1 从“LPTSTR”转换为“const char *”
        与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
c:\documents and settings\true\my documents\visual studio 2005\projects\p35\p35\p35.cpp(15) : error C2664: “ReadFile”: 不能将参数 2 从“TCHAR”转换为“LPVOID”
        从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换
c:\documents and settings\true\my documents\visual studio 2005\projects\p35\p35\p35.cpp(17) : error C2664: “MessageBoxW”: 不能将参数 2 从“TCHAR”转换为“LPCWSTR”
        从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换
生成日志保存在“file://c:\Documents and Settings\True\My Documents\Visual Studio 2005\Projects\p35\p35\Debug\BuildLog.htm”
p35 - 7 个错误,0 个警告
为什么会这样呢?

解决方案 »

  1.   

    可能因爲默認用Unicode 所以LPTSTR\LPCWSTR都被定義成Unicode類型的字符串 ,char != wchar
    TCHAR到LPVOID不同的類型要強制類型轉換 TCHAR szBuf(128);的意思並不是TCHAR szBuf[128];
      

  2.   

    就是楼上说的原因,用_T("C:\\File.txt"),_T("Hello World!")试试
      

  3.   

    在VC2005中,所有的字符都为Unicode,所以每一个字符串都因该加上_T("xxx")。
    测定宽字符长度的函数是wcslen,而不是strlen。
      

  4.   


    不是很有用,_T是一个宏,如果定义了unicode,_T("x")就相当于L"x",这是宽字符
    如果没有定义unicode,_T("x")就相当于"x"
      

  5.   

    http://forums.msdn.microsoft.com/en-US/vclanguage/thread/c1b08c0a-a803-41c3-ac8c-84eba3be1ddb/
    FAQ: Cannot convert from 'const char [..]' to 'LPCTSTR'