loadLibraryw는 nullptr을 반환하고 getLasterror ()가 3221225619를 반환합니다.

StackOverflow https://stackoverflow.com/questions/19834543

  •  25-07-2022
  •  | 
  •  

문제

내가 가진 문제를 설명하기 위해서는 너무 오래 걸리지 만 날카로운 끝의 문제는 다음과 같습니다.

  1. 유효한 경로가 주어지면 loadlibraryw가 실패 (nullptr을 반환).

  2. 프로세스 모니터는 의심스러운 실패를 기록하지 않거나 실제로 DLL을로드하는 데 성공할 때와는 다른 점을 기록합니다 (다른 상황에서 할 수 있음).

  3. DLL에는 비 시스템 의존성이 없습니다.

  4. ... 무엇보다도 GetLasterror가 반환 한 Windows 오류 코드는 3221225619입니다.

3221225619가 유효한 오류 코드가 아니라고 가정하면 Windows가 오류 코드가 없을 정도로 잘못 될 수있는 것은 무엇입니까?

편집하다:

일부 사람들은 실패 자체에 대한 자세한 내용을 원한다고 생각합니다.

  • 그것은 입력이 아닌 것으로 보이지 않습니다. 작동 및 실패 버전에서 동일하며 LoadLibraryw는 입력 문자열이 절단 된 경우 "파일이 존재하지 않는다"고 성공적으로 선언했습니다. 현재 입력은 하드 코딩되어 오류의 여지가 거의 없습니다.
  • DLL은 Debug에서 릴리스 및 호출 코드에서 컴파일됩니다. 나는 문제없이 18 개월 동안이 일을 해왔지만 당신은 결코 알지 못합니다.
  • 프로세스 모니터 패키지는 CreateFile, LoadImage, RegopenKey를 포함하여 LoadLibraryw 내에서 실행되는 30 개의 내부 작업을보고합니다. 이것들은 동일한 작업 통화 및 실패한 통화의 경우 파일 크기 및 메모리 위치로 내려갑니다.
  • C ++ 객체에 호출되는 명백한 메모리 손상은 없으며, 내가 말했듯이 프로세스 모니터는 두 경우 모두 동일한 기본 이미지 주소를 제공합니다.
  • 실패는 100% 일관된 일관성 - 동시에, 매번 같은 장소.
도움이 되었습니까?

해결책

죄송합니다 바로 그거죠 답은 문제가 해결되었습니다.

우선, 여기서 비슷한 질문을 발견했습니다. C ++ loadLibrary () 오류 3765269347. 나는 이것이 더 많은 세부 사항을 제공한다고 생각하며, 당신이 내가 있었던 것과 비슷한 위치에 있다면 살펴볼 가치가 있습니다.

@Whozcraig, @danieldaranas 및 도움이되는 의견을 한 다른 모든 분들께 감사드립니다. 이 글을 읽는 다른 사람들에게는 Hresult에 대한 좋은 기사가 있습니다. http://en.wikipedia.org/wiki/hresult.

제 경우에는 문제가 발생했던 것처럼 문제가 사라졌습니다. 정기적으로 DLL을 호출하기 위해 C ++ 클래스를 만들었습니다. 저의 원래의 노력은 첫 번째 호출 직전에 DLL을로드하고 메모리에 캐시했습니다. 이것은 원칙적으로 1 년 넘게 어떻게 일했는지와 동일합니다. 이로 인해 위의 신비한 오류가 발생했습니다.

건설 중에 DLL을로드하도록 리팩토링했지만 런타임에 기능 만 추출합니다. 이것은 분명히 작동하며 아마도 더 나은 방법 일 것입니다 (구조 중에 DLL을로드하여 파괴 중에 해방). 구조와 DLL에 대한 첫 번째 호출 사이에는 거의 진행되지 않기 때문에 한 메소드가 OS 오류를 생성 해야하는 이유를 알 수없고 다른 방법은 그렇지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top