Когда я пытаюсь загрузить DLL с помощью LoadLibrary
, дескриптор не является нулевым, но GetLastError
возвращает 14007. Любые идеи?
MSDN говорит:
ERROR_SXS_KEY_NOT_FOUND
14007 (0x36B7)
The requested lookup key was not found in any active activation context
HMODULE handle = LoadLibrary ("mydll.dll"); r = GetLastError(); if (! handle) return 0;
Код ошибки не всегда сбрасывается при успешном завершении.
Прежде всего, чтобы узнать, успешно ли вызов функции, вы следуете семантике, указанной в документации. В этом случае, возвращает ли LoadLibrary
допустимый дескриптор.
Вы указали, что это так, поэтому результат GetLastError
не имеет значения. Это может быть результатом некоторых предыдущих вызовов, которые не удались.
Возвращаемое значение - код последней ошибки вызывающего потока.
Раздел "Возвращаемое значение" документации для каждой функции, которая устанавливает код последней ошибки, отмечает условия, при которых функция устанавливает код последней ошибки. Большинство функций, которые устанавливают код последней ошибки потока, устанавливают его, когда они терпят неудачу. Однако некоторые функции также устанавливают код последней ошибки, когда они преуспевают. Если функция не документирована для установки кода последней ошибки, значение, возвращаемое этой функцией, является просто самым последним последним кодом ошибки, который был установлен; некоторые функции устанавливают код последней ошибки в 0 при успешном запуске, а другие - нет.
Я не вижу ничего в документации LoadLibrary
предполагая, что код ошибки установлен на 0 при успехе, что означает, что это не имеет смысла в вашем случае.