Почему GetProcAddress не работает с функцией OutputDebugString

Я пытался использовать GetProcAddress с несколькими функциями из kernel32.dll. Он работал нормально, за исключением функции "OutputDebugString".

Мой код:

typedef void(WINAPI *LPGETNUMBER)(LPCTSTR);

int main() {
    const LPGETNUMBER pAddr = (LPGETNUMBER)GetProcAddress(GetModuleHandle((LPCSTR)("kernel32.dll")), "OutputDebugString");
    if (NULL == pAddr) {
        int32_t nLastErrorCode = GetLastError();
    }
}

person ohad    schedule 20.11.2018    source источник
comment
И как это не работает? Какие ошибки вы получаете? И, пожалуйста, прочтите как задавать хорошие вопросы, а также этот контрольный список вопросов.   -  person Some programmer dude    schedule 20.11.2018
comment
Подсказка: почти все функции, обрабатывающие строки, имеют две версии: одну для ASCII и одну для Unicode (с использованием Wсимволов ide). Они реализованы как две функции с разными именами.   -  person Some programmer dude    schedule 20.11.2018
comment
извините, мой первый вопрос здесь. как это не работает? - pAddr является нулевым указателем   -  person ohad    schedule 20.11.2018
comment
извините, мой первый вопрос здесь. как это не работает? - pAddr является нулевым указателем. Какие ошибки вы получаете? - Я получаю код ошибки 127 (Не удалось найти указанную процедуру.)   -  person ohad    schedule 20.11.2018


Ответы (2)


Нет такой функции. Экспорты называются OutputDebugStringA и OutputDebugStringW.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363362

person Michael Chourdakis    schedule 20.11.2018
comment
Спасибо! Я пропустил это, когда проверял документацию! - person ohad; 20.11.2018

OutputDebugString — это макрос, который расширяется до OutputDebugStringA или OutputDebugStringW в зависимости от того, используете ли вы ANSI или Unicode. Поэтому вам нужно выбрать один из них (предпочтительно, но не обязательно, в зависимости от вашего режима сборки).

person axalis    schedule 20.11.2018