none
CHAR * 转换为 LPWSTR 的问题 RRS feed

  • 问题

  • 在Debug版本下 
       CHAR* p[] = {"某某".“等等”};
        LPWSTR pszText = p[0];
    他们之间的转换是不会报错的。

    但是在release版本下会报错。
    他们之间的转换应该怎样实现?

    2010年1月24日 13:05

答案

  • Update 一下以上两位。

    A2W 是ATL 库里面非常有用的ANSI 字符集转换宽字符集的宏。使用这个宏需要一下步骤:


    1) 在stdafx.h 或者要只用A2W 宏的源代码文件中加入"#include <atlbase>"
    2) 在需要转换ANSI 字符集到宽字符集的函数代码里面第一行加入"USES_CONVERSION;" 宏,用来声明转换宏A2W所必须的一些必要变量
    3)    CHAR* p[] = {"某某".“等等”};
        LPWSTR pszText = A2W(&p[0]);

    即可。

    说到底是因为LPWSTR 是指向wchar_t 类型的指针。wchar_t 和 char 不是同一个类型。
    • 已标记为答案 飘零雪 2010年1月25日 1:29
    2010年1月25日 0:42
    版主

全部回复

  • A2W

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2010年1月24日 15:52
    版主
  • 在Debug版本下 
       CHAR* p[] = {"某某".“等等”};
        LPWSTR pszText = p[0];
    他们之间的转换是不会报错的。

    但是在release版本下会报错。
    他们之间的转换应该怎样实现?

    你可以使用ATL中的CA2W来转换你的字符串编码
    CA2W pswText(p);
    然后通过访问 pswText.m_psz来取得UNICODE的字符串

    2010年1月25日 0:26
  • Update 一下以上两位。

    A2W 是ATL 库里面非常有用的ANSI 字符集转换宽字符集的宏。使用这个宏需要一下步骤:


    1) 在stdafx.h 或者要只用A2W 宏的源代码文件中加入"#include <atlbase>"
    2) 在需要转换ANSI 字符集到宽字符集的函数代码里面第一行加入"USES_CONVERSION;" 宏,用来声明转换宏A2W所必须的一些必要变量
    3)    CHAR* p[] = {"某某".“等等”};
        LPWSTR pszText = A2W(&p[0]);

    即可。

    说到底是因为LPWSTR 是指向wchar_t 类型的指针。wchar_t 和 char 不是同一个类型。
    • 已标记为答案 飘零雪 2010年1月25日 1:29
    2010年1月25日 0:42
    版主
  • Update 一下以上两位。

    A2W 是ATL 库里面非常有用的ANSI 字符集转换宽字符集的宏。使用这个宏需要一下步骤:


    1) 在stdafx.h 或者要只用A2W 宏的源代码文件中加入"#include <atlbase>"
    2) 在需要转换ANSI 字符集到宽字符集的函数代码里面第一行加入"USES_CONVERSION;" 宏,用来声明转换宏A2W所必须的一些必要变量
    3)    CHAR* p[] = {"某某".“等等”};
        LPWSTR pszText = A2W(&p[0]);

    即可。

    说到底是因为LPWSTR 是指向wchar_t 类型的指针。wchar_t 和 char 不是同一个类型。

    新版本中的ATL应该使用CA2W类而不再需要USES_CONVERSION了吧。
    2010年1月25日 1:11