사용하기 전에 DLL의 존재를 결정합니다
-
20-09-2019 - |
문제
Visual C ++ 2008 Express Edition 사용. 내 응용 프로그램을 가져 오기 라이브러리와 연결하고 있습니다..lib
) 대상 시스템에 존재하거나 존재하지 않을 수도있는 DLL의 경우. 당신이 물어보기 전에 : 나는 내 신청서와 함께 DLL을 배포 할 수 없습니다.
DLL이 없으면 DLL에서 함수를 호출하자마자 (그러나 더 빨리!)
Somelibrary.dll이 발견되지 않았기 때문에이 응용 프로그램이 시작되지 않았습니다. 응용 프로그램을 다시 설치하면이 문제가 해결 될 수 있습니다.
내가 대신하고 싶은 것은 응용 프로그램이 DLL이 없음을 감지하고 단순히 그 기능에 의존하는 기능을 비활성화한다는 것입니다. 나는 전화를 걸 수있다 LoadLibrary
그리고 그것이 성공했는지 확인하지만 이것이 충분한 지 확실하지 않습니다. 수입 도서관이 무대 뒤에서 더 많은 일을할까요?
간단합니다 LoadLibrary
충분한 전화? 그렇지 않다면, 또 무엇을해야합니까? 이 작업을 수행 할 수 있습니까?
업데이트: 물론 사용할 수 있습니다 LoadLibrary
, 그리고 GetProcAddress
내가 사용하고 싶은 각 기능에 대해. 그러나 그것은 번거 로움이며, 나는 그것을 피하고 단순히 제공된 가져 오기 라이브러리를 대신 사용하기를 바랐습니다.
해결책
이것이 Delayload Linker 옵션의 경우이지만 Express Edition이 지원하는지 여부는 모르겠습니다.
다른 팁
아니, LoadLibrary()
정확히 당신이 원하는 것입니다. 그것을 사용하는 유일한 결과는 DLL을 성공적으로로드 할 때 함수 포인터를 DLL에 설정하는 번거 로움이지만 그 과정은 그물의 다른 곳에 잘 덮여 있습니다.
확인하면 확인하십시오 여기 (msdn) 당신은 언제 볼 수 있습니다 LoadLibrary
로드에 실패하고 함수는 NULL 값을 반환하며 사용하여 특정 오류 (파일이 없어야 함)를 확인할 수도 있습니다. GetLastError
기능.