【问题标题】:Converting HTML resource to string in MFC在 MFC 中将 HTML 资源转换为字符串
【发布时间】:2021-12-24 03:27:14
【问题描述】:

我在 MFC 应用程序中将 HTML 资源转换为 CString 时遇到了一些术语。任何帮助将不胜感激。我正在 VC++ 2022 上编译,显然是使用 unicode。

CString GetHTML(const int& RESOURCE_ID)
{
    CString str;
    HRSRC hrsrc = FindResource(NULL, MAKEINTRESOURCE(RESOURCE_ID), RT_HTML);
    if (hrsrc != NULL)
    {
        HGLOBAL pResource = LoadResource(NULL, hrsrc);
        if (pResource != NULL)
        {
            LPCTSTR lpctstr = static_cast<LPCTSTR>(LockResource(pResource));
            if (lpctstr != NULL)
            {
                str = CString(lpctstr, ::SizeofResource(NULL, hrsrc));
                return str;
            }
            UnlockResource(pResource);
        }
        FreeResource(pResource);
    }
    return NULL;
}

【问题讨论】:

  • 以上代码哪一部分不起作用?

标签: c++ visual-c++ mfc


【解决方案1】:

我的通灵能力表明您的 HTML 资源文件是 ascii,但您将 LockResource 返回的 ascii 字节转换为 unicode 字符串 LPCTSTR(指向 TCHAR 的指针)。

最简单的方法是让您的函数返回 CStringA 而不是 CStringW,然后将字符串作为 ascii 进行所有处理。

声明您的函数以显式返回CStringA 实例:

CStringA GetHTML(const int& RESOURCE_ID)
{
    CStringA str;

然后,而不是这个:

        LPCTSTR lpctstr = static_cast<LPCTSTR>(LockResource(pResource));
        if (lpctstr != NULL)
        {
            str = CString(lpctstr, ::SizeofResource(NULL, hrsrc));
            return str;
        }

这个:

        const char* psz = static_cast<const char*>(LockResource(pResource));
        if (psz != NULL)
        {
            str = CStringA(psz);
            return str;
        }

或者,如果您想从您的函数返回一个 unicode CString(W),您可以使用 MultiByteToWideChar API 将资源转换为 unicode。 MFC/ATL 为此提供了一个方便的宏。

        const char* psz = static_cast<const char*>(LockResource(pResource));
        if (psz != NULL)
        {
            USES_CONVERSION;
            CStringW strW = A2W(psz);
            return strW;
        }

另外,请注意我删除了所有 LPCTSTR 引用。我有numerous rants about avoiding TCHAR macros

【讨论】:

  • 不确定,对于转换,我认为 CStringW strW = CStringW(psz) 也适用于此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多