我有一个期望LPCTSTR的课程。
当我打电话时: 新的CFileImageLoader(_T(“Splash02.png”)) 要么 新的CFileImageLoader(“Splash02.png”)
两者都不起作用。 为什么? 我是新来的cpp ...... 谢谢 乔纳森d。
答案 0 :(得分:1)
此问题是C ++问题和Windows特定问题的组合。
C ++定义了两种类型的字符串,常规字符串和宽字符串。常规字符串如下所示:
const char *str = "regular string";
虽然宽字符串看起来像:
const wchar_t *wstr = L"wide string";
使用标准C ++,您必须决定何时编写库,无论是使用常规字符串还是宽字符串。
Windows定义了一个名为tchar的伪类型。使用tchar,您可以编写如下内容:
LPCTSTR tstr = _T("regular or wide string");
这实际上是常规(char *)还是宽(wchar_t *)字符串取决于您是否编译Unicode代码。
由于该函数被指定为采用LPCTSTR,因此需要使用适当的类型调用它来进行编译。
如果您知道您只是在使用或不支持Unicode的情况下构建,则可以跳过所有TCHAR内容并直接分别使用wchar_t或char。
由于CFileImageLoader("Splash02.png")
不起作用,您必须在启用Unicode支持的情况下进行编译。您可以将其更改为CFileImageLoader(L"Splash02.png")
并承诺始终使用Unicode,或者您可以将其更改为CFileImageLoader(_T("Splash02.png"))
并让宏魔法完成工作。
答案 1 :(得分:0)
“两者都不起作用” - 你可能是一个小小的,更具体的一点点吗?
如果使用_UNICODE定义编译,那么第二个甚至不应该编译。
您也只是传递文件名,而不是完整路径。也许您的图像加载器类无法找到该文件,因为它使用了您期望的不同CWD路径。尝试传递完整路径。
答案 2 :(得分:0)