c++ - 无法将 lpCmdLine 参数分配给 char* 指针

标签 c++ mfc lptstr

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

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

    char* szCmdLine = lpCmdLine;

...
}

Error this lines : error C2440: 'initializing' cannot convert from 'LPTSTR' to 'char *'

最佳答案

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

LPSTR 只是 char* 的别名。 LPWSTR - wchar_t*LPTSTR 中的 T 表示 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;

...
}

关于c++ - 无法将 lpCmdLine 参数分配给 char* 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34599009/

相关文章:

c++ - 我的类有一个 toString() 方法,我如何使用它在 std::unordered_set 中进行散列?

c++ - cmake 包括来自其他目录的 h 文件

c++ - 从 MFC 调用 ATL COM dll

c++ - Win32 LoadBitmap 返回错误 1814

c++ - QT中两个窗口共享websocket连接

c++ - ListView控件中的LVN_ITEMCHANGED优化

c++ - 如何在 MFC 对话框中制作虚线分隔符?

C++ 从磁盘读取文件并将其写入共享内存

c++ - AfxMessageBox - 访问冲突

c++ - 将字节数组的内容转换为 wchar_t*