2014-01-27 4 views
0

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

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', что может быть, для instantece 2 байта. Таким образом, есть вероятность, что вы должны выполнить «преобразование байтов» ... что-то вроде m_raw_content.length() * sizeof (wchar_t), конечно, в зависимости от реализации 'output.Format'. –

+0

переменная 'output' предназначена только для диагностики. Я написал это потому, что этот метод не работает. – Victor

+0

Являются ли строковые ресурсы встроенными в DLL? – benjymous

ответ

2

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

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

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

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

+0

У меня нет никакого DLLMain в моем проекте :)) – Victor

+0

Вы должны просто добавить его - см. Сообщение, которое я связал с – benjymous

+0

. Моя DLL - это MFC DLL – Victor

0

Посмотрите на this question, который покажет вам, как получить HINSTANCE вашей DLL если это MFC DLL.

 Смежные вопросы

  • Нет связанных вопросов^_^