从字符串转换为 LPCTSTR 时遇到问题
Posted
技术标签:
【中文标题】从字符串转换为 LPCTSTR 时遇到问题【英文标题】:Having trouble converting from string to LPCTSTR 【发布时间】:2012-10-03 11:51:46 【问题描述】:我正在尝试将一些文本放入静态文本小部件中,如下所示:
m_StartupTime.SetWindowText(someStringVariable);
并得到一个错误:
'CWnd::SetWindowTextA' : 无法将参数 1 从 'std::string' 转换为 'LPCTSTR'
我曾尝试使用c.str()
方法,但是当我这样做时,程序编译正常,但在运行时崩溃,抛出错误:
所以我正在弄清楚问题是否与转换有关,还是与此有关?
使用 CString 并不能解决问题,我尝试从 Unicode 字符集切换到多字节,但没有成功。哦,我在 MFC 中开发。
编辑:找到解决方案!我使用了 CString 类。
string a = "smth";
CString str(a.c_str());
【问题讨论】:
你检查过someStringVariable
吗?可能已损坏
str.c_str() 为您提供一个 const char *,它是一个 LPCSTR(指向 C 字符串的长指针)。所以你的问题不在于这个函数,而在于其他地方。
m_StartupTime.SetWindowText(CString(someStringVariable.c_str()));
你的问题让我很困惑。你的项目是 Unicode 还是不是?这两个中的哪一个会编译m_StartupTime.SetWindowText("")
或m_StartupTime.SetWindowText(L"")
?
辩证法:第二个。它是 Unicode。
【参考方案1】:
断言对话框显示断言发生的位置:文件 winocc.cpp,第 246 行。
查看代码,这是该文件中的行:
ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
您的断言似乎与字符串无关,但控件不存在(还没有?),即控件窗口无效或不存在。
【讨论】:
【参考方案2】: CA2T str(someStringVariable.c_str()); m_StartupTime.SetWindowText(str);假设 someStringVariable 具有 std::string 类型。包括 AtlBase.h 来编译它。
【讨论】:
以上是关于从字符串转换为 LPCTSTR 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章