2009-09-11 106 views
2

我想调用一个接受LPTSTR作为参数的函数。我用字符串来调用它,如foo(“bar”);const char * to LPTSTR

我得到一个错误,我无法将参数1从'const char [3]'转换为'LPTSTR'“,但我不知道为什么或者如何解决它。任何帮助都会很棒。

+1

这与OpenGL有什么关系? – genpfault 2009-09-11 21:26:51

+1

您是否意指LPCTSTR而不是LPTSTR? – 2009-09-11 21:50:27

回答

6

您可能已经定义了UNICODE,并且LPTSTR扩展为wchar_t *。使用TEXT宏来处理字符串以避免出现问题,例如foo(TEXT("bar"))

+2

个人我总是使用“_T”宏,但它完全一样的东西:) – Goz 2009-09-11 21:01:19

+0

TEXT(“bar”)是一个常量字符串,LPCTSTR。 LPTSTR是非常量的,所以这可能不起作用。 – 2009-09-11 21:01:31

+0

谢谢。文字(“酒吧”)工作正常。 – captncraig 2009-09-11 21:02:52

1

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

+0

您的代码行不会在unicode构建中编译 - 您需要使用其中一个智能T宏。这些天,我甚至不使用T类型,它们现在是非常不协调的,因为一切都是unicode – 2009-09-11 21:03:34

+0

谢谢,我在看到之前编辑过。 – 2009-09-11 21:06:39

0
foo(const_cast<LPTSTR>("bar")); 

编译时将FOO试图改变一个已经传递给它的数据上面崩溃的解释。