Я пытаюсь загрузить строку из моей таблицы 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
,
Где я не прав?
AfxGetInstanceHandle()
дает вам HINSTANCE
из исполняемый файл. Это означает, что ваш LoadStringW
Вызов будет искать в таблице ресурсов exe для вашей строки, которая потерпит неудачу, так как строки находятся в вашей DLL.
Вместо этого вам нужно взять HINSTANCE
из Сама DLL — это предоставляется в качестве первого параметра DllMain()
в вашей DLL.
Посмотрите этот ответ для примера:
https://stackoverflow.com/a/2396380/1073843
РЕДАКТИРОВАТЬ:
Если вы используете MFC DLL, возможно, вам просто нужно добавить вызов AFX_MANAGE_STATE(AfxGetStaticModuleState());
в верхней части любой точки входа в вашу DLL (до AfxGetInstanceHandle()
называется.)
Взгляни на этот вопрос, который покажет вам, как получить HINSTANCE
вашей DLL, если это MFC DLL.