【问题标题】:Cannot assign lpCmdLine parameter to a char* pointer无法将 lpCmdLine 参数分配给 char* 指针
【发布时间】:2016-01-04 20:10:34
【问题描述】:

此代码检查运行应用程序此参数:

INT APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT iShow)
{

    char* szCmdLine = lpCmdLine;

...
}

此行出错:错误 C2440:“正在初始化”无法从“LPTSTR”转换为“字符 *”

【问题讨论】:

  • TCHAR* szCmdLine = lpCmdLine; 有效吗? Afaik LPTSTR 由 TCHAR 组成,而不是 char。

标签: c++ mfc lptstr


【解决方案1】:

这是因为考虑到项目的 UNICODE 设置,LPTSTR 可能是 LPSTRLPWSTR。启用 unicode 时,应用程序使用 LPWSTR,如果不是 LPSTR

LPSTR 只是char* 的别名。 LPWSTR - wchar_t*T in LPTSTR 表示 TCHAR 类型可以是 charwchar_t 任何 UNICODE_UNICODE 符号在您的项目中定义。

LP 表示“长指针”,long 是 32 位内存地址。 STR - 字符串。

让我们来描述LPSTR - “指向ANSI字符串的长指针”; LPWSTR - “指向宽字符串的长指针”和 LPTSTR - “指向 TCHAR 字符串的长指针”。

WT 字母可以添加前缀C,如LPCSTRLPCTSTRLPCWSTR,这意味着这些指针是常量,如const char*const wchar_t*

所以你的代码必须是这样的:

INT APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT iShow)
{

    TCHAR* szCmdLine = lpCmdLine;

...
}

INT APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT iShow)
{

    LPTSTR szCmdLine = lpCmdLine;

...
}

【讨论】:

    猜你喜欢
    • 2018-10-06
    • 2011-04-02
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2023-03-26
    • 2015-10-26
    • 2011-03-21
    • 2011-02-23
    相关资源
    最近更新 更多