11

我正在用 VC++ 编写一个 DLL,我需要使用外部文本文件。我现在有这样的事情:

 ifstream file;
 string line;

 file.open("C:\\Users\\Me\\Desktop\\textfile.txt");
 getline(file,line);
 file.close();

我知道我可以在资源中拥有这个文件,对吗?

我通过转到“ResourceView”->“添加资源”->“导入”添加了我的文本文件。我选择了我的文本文件并创建了自定义资源类型。

如何访问此文件以使用类似于上面的代码?我有 Resource.h 但我应该怎么做?我也可以编辑我的资源文本文件吗?

4

1 回答 1

14

假设:

  • 资源类型为“TEXT”
  • 资源 ID 是 MY_RESOURCE_ID(这将是您的 resource.h 中的常量)
  • 您已将 EXE 或 DLL(无论哪个包含资源)的 hInstance 存储到 m_hInstance 中。

将资源加载到内存中并获取指向它的指针是这样完成的:

HRSRC hResource = FindResource(m_hInstance, MAKEINTRESOURCE(MY_RESOURCE_ID), L"TEXT");

if (hResource)
{
    HGLOBAL hLoadedResource = LoadResource(m_hInstance, hResource);

    if (hLoadedResource)
    {
        LPVOID pLockedResource = LockResource(hLoadedResource);

        if (pLockedResource)
        {
            DWORD dwResourceSize = SizeofResource(m_hInstance, hResource);

            if (0 != dwResourceSize)
            {
                 // Use pLockedResource and dwResourceSize however you want
            }
        }
    }
}

注意:在 32 位或 64 位版本的 Windows 上,您不必卸载或解锁资源,并且如果您再次获得该资源,您将不会泄漏内存;你总是得到相同的记忆。

有关更新资源,请参阅更新 MSDN中的资源。

于 2010-12-03T11:48:09.047 回答