【问题标题】:CFileImageLoader(LPCTSTR lpszFileName);CFileImageLoader(LPCTSTR lpszFileName);
【发布时间】:2009-01-06 08:50:44
【问题描述】:

我有一个需要 LPCTSTR 的课程。

当我打电话时: 新的 CFileImageLoader(_T("Splash02.png")) 或者 新的 CFileImageLoader("Splash02.png")

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

【问题讨论】:

  • 它们在哪些方面不起作用?您收到什么错误消息?
  • 问题需要澄清:您是否正在寻找一种从 CString 转换为 LPCTSTR 的方法?

标签: c++ windows mfc


【解决方案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")) 并让宏魔法来完成工作。

【讨论】:

    【解决方案2】:

    “两者都不起作用”——你能不能再具体一点?

    如果您使用定义的 _UNICODE 进行编译,那么第二个甚至不应该编译。

    您也只是传递了一个文件名,而不是完整路径。也许您的图像加载器类找不到该文件,因为它使用了与您期望的不同的 CWD 路径。请尝试传递完整路径。

    【讨论】:

      【解决方案3】:
      1. 可能你的图片库不支持打开PNG格式文件。
      2. 尝试传递完整路径。
      3. 可能你需要调用一些图片库提供的初始化函数

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-11
        • 2012-04-04
        • 2011-07-09
        • 2010-09-24
        • 1970-01-01
        • 2017-11-10
        • 2012-04-04
        • 2016-06-07
        相关资源
        最近更新 更多