我想调用一个接受LPTSTR作为参数的函数。我用字符串来调用它,如foo(“bar”);const char * to LPTSTR
我得到一个错误,我无法将参数1从'const char [3]'转换为'LPTSTR'“,但我不知道为什么或者如何解决它。任何帮助都会很棒。
我想调用一个接受LPTSTR作为参数的函数。我用字符串来调用它,如foo(“bar”);const char * to LPTSTR
我得到一个错误,我无法将参数1从'const char [3]'转换为'LPTSTR'“,但我不知道为什么或者如何解决它。任何帮助都会很棒。
您可能已经定义了UNICODE,并且LPTSTR扩展为wchar_t *。使用TEXT宏来处理字符串以避免出现问题,例如foo(TEXT("bar"))
。
个人我总是使用“_T”宏,但它完全一样的东西:) – Goz 2009-09-11 21:01:19
TEXT(“bar”)是一个常量字符串,LPCTSTR。 LPTSTR是非常量的,所以这可能不起作用。 – 2009-09-11 21:01:31
谢谢。文字(“酒吧”)工作正常。 – captncraig 2009-09-11 21:02:52
LPTSTR是一个非常量指向TCHAR的指针。反过来,TCHAR被定义为ANSI构建中的char和Unicode构建中的wchar_t(定义了UNICODE和/或_UNICODE符号)。
所以,一个LPTSTR相当于:
TCHAR foo[] = _T("bar");
,因为它不是const的,你不能安全地用文字把它叫做 - 文本可以在只读内存段进行分配,并LPTSTR是被叫方可以改变字符串内容的信号,例如
void truncate(LPTSTR s)
{
if (_tcslen(s) > 4)
s[3] = _T('\0');
}
如果您在字面通过这将崩溃,当用Visual C++ 2008
您的代码行不会在unicode构建中编译 - 您需要使用其中一个智能T宏。这些天,我甚至不使用T类型,它们现在是非常不协调的,因为一切都是unicode – 2009-09-11 21:03:34
谢谢,我在看到之前编辑过。 – 2009-09-11 21:06:39
foo(const_cast<LPTSTR>("bar"));
编译时将FOO试图改变一个已经传递给它的数据上面崩溃的解释。
这与OpenGL有什么关系? – genpfault 2009-09-11 21:26:51
您是否意指LPCTSTR而不是LPTSTR? – 2009-09-11 21:50:27