dll — метод LoadString () не работает в переполнении стека

Я пытаюсь загрузить строку из моей таблицы 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

Решение

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

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

Посмотрите этот ответ для примера:
https://stackoverflow.com/a/2396380/1073843

РЕДАКТИРОВАТЬ:
Если вы используете MFC DLL, возможно, вам просто нужно добавить вызов AFX_MANAGE_STATE(AfxGetStaticModuleState()); в верхней части любой точки входа в вашу DLL (до AfxGetInstanceHandle() называется.)

2

Другие решения

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

0

По вопросам рекламы [email protected]