LPTSTR只是宏,
#ifdef _UNICODE
#define LPTSTR LPWSTR
#else
#define LPTSTR LPSTR
#endif也是说,LPTSTR的真实类型依赖于你使用的是UNICODE还是ANSI,它的目的是增强程序的平台可移植性。
从上例结果中,可以看出你用的是UNICODE 但参数用却是ASNI,ANSI 不能代换UNICODE ,必须进行转换才行。

解决方案 »

  1.   

    可是在98中可以得到edit中的字符,是什么原因呢?
    怎么进行转换?我刚开始学。
      

  2.   

    这就是因为在win98(单) 和winnt(宽) 中使用字符的宽度不同造成的
      

  3.   

    如果采用ANSI字符集(不要定义_UNICODE常量),在95和98下肯定没有问题,而在NT下运行,操作系统将把单字节转换为宽字节。所以,建议你不要使用Unicode字符集就可以解决。
    实际上,必须要解决宽字符的是在COM中,如果你用到来,则必须要转换。char* strKey;
    strKey=(char*)malloc(pLs->m_editkey.LineLength());        //分配空间
    pLs->m_editkey.GetLine(0,strKey);你的代码改成这样如何:
    CString strText, strLine;
    m_editkey.GetLine(0, strText.GetBuffer(m_editkey.LineLength(0)));
    //strText.ReleaseBuffer();//在使用其他 CString 之前一定要调用这个成员
    //strLine.Format(TEXT("line %d: '%s'\r\n"), i, strText.GetBuffer(0));
      

  4.   

    更正,上面应是:
    #ifdef _UNICODE
    typedef LPWSTR LPTSTR 
    #else
    #define LPSTR LPTSTR
    #endif