Как загрузить текстовый файл из ресурсов в VC ++? - PullRequest
10 голосов
/ 03 декабря 2010

Я пишу DLL на VC ++, и мне нужно использовать внешний текстовый файл.У меня есть что-то вроде этого прямо сейчас:

 ifstream file;
 string line;

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

Я понимаю, что я могу иметь этот файл в ресурсах правильно?

Я добавил свой текстовый файл, перейдя в "ResourceView" -> "ДобавитьРесурс "->" Импорт ".Я выбрал свой текстовый файл и создал пользовательский тип ресурса.

Как я могу получить доступ к этому файлу, чтобы использовать его так же, как в коде выше?У меня есть Resource.h, но что мне с ним делать?Могу ли я редактировать свой текстовый файл ресурса?

1 Ответ

13 голосов
/ 03 декабря 2010

Предположения:

  • Тип ресурса "ТЕКСТ"
  • Идентификатор ресурса - MY_RESOURCE_ID (это будет константа из вашего resource.h)
  • Вы сохранили hInstance для вашего EXE или DLL (в зависимости от того, какой ресурс содержит) в 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...