CFileImageLoader(LPCTSTR lpszFileName);

时间:2009-01-06 08:50:44

标签: c++ windows mfc

我有一个期望LPCTSTR的课程。

当我打电话时:  新的CFileImageLoader(_T(“Splash02.png”)) 要么  新的CFileImageLoader(“Splash02.png”)

两者都不起作用。 为什么? 我是新来的cpp ...... 谢谢 乔纳森d。

3 个答案:

答案 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)

  1. 也许您的图片库无法支持打开PNG格式文件。
  2. 尝试传递完整路径。
  3. 也许您需要调用一些由图像库提供的初始化函数