Метод LoadString () не работает в C ++

0

Я пытаюсь загрузить строку из моей таблицы Strin в DLL файле, над которым я работаю. Вот функция, которая должна загружать строку в std::wstring (поскольку в моем проекте используется кодировка Unicode).

void ErrorHandler::load_error_string()
{
  m_hInst = AfxGetInstanceHandle();
  wchar_t buffer[1024] = { '\0' };
  std::size_t string_length = LoadStringW(this->m_hInst, this->m_error_id, buffer, 1024);

  this->m_raw_content = std::wstring(buffer, string_length);

  CStringW output;
  output.Format(L"%d", m_raw_content.length());

  AfxMessageBox(output);
}

Я создал последние три строки для диагностики метода. Выход AfxMessageBox() равен 0.

Где я ошибаюсь?

  • 0
    имейте в виду, что string_length может представлять размер std::wstring , а std::wstring имеет wchar_t , который может быть, для экземпляра 2 байта. Так что есть вероятность, что вы должны выполнить byte conversion ... что-то вроде m_raw_content.length () * sizeof (wchar_t), конечно, в зависимости от вашей реализации. output.Format .
  • 0
    output переменная предназначена только для диагностики. Я написал это, потому что этот метод не работает.
Показать ещё 3 комментария
Теги:
dll
resources
mfc

2 ответа

2
Лучший ответ

AfxGetInstanceHandle() дает вам HINSTANCE исполняемого исполняемого файла. Это означает, что ваш вызов LoadStringW будет искать в таблице ресурсов exe для вашей строки, что приведет к сбою, поскольку строки находятся в вашей DLL.

Вместо этого вам нужно будет захватить HINSTANCE самой DLL - это предоставляется в качестве первого параметра DllMain() в вашей DLL.

См. Этот ответ для примера: qaru.site/questions/1735786/...

EDIT: если вы используете MFC DLL, то вам может понадобиться добавить вызов AFX_MANAGE_STATE(AfxGetStaticModuleState()); в верхней части любых точек входа в вашу DLL (до AfxGetInstanceHandle().)

  • 0
    У меня нет DLLMain в моем проекте :))
  • 0
    Вы должны иметь возможность просто добавить один - см. Пост, на который я ссылался
Показать ещё 4 комментария
0

Взгляните на этот вопрос, который покажет вам, как получить HINSTANCE вашей DLL, если это MFC DLL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню