2011-10-12 4 views
5

QT로 작성된 프로그램이 있습니다. 그러나 프로그램에 의해로드 된 dll은 bonjour를 사용하기 때문에 dnssd.dll에 대한 간접적 인 종속성이 있습니다. 봉쥬르이 프로그램을 실행하는 컴퓨터에 설치되어 있지 않은 경우는 dnssd.dll이 컴퓨터에서 누락되어dll 누락 오류 메시지 개선

프로그램을 시작할 수 없습니다 말할 것이다. 프로그램을 다시 설치하여 문제를 해결하십시오.

LoadLibrary 또는 그 밖의 방법으로이 dll을로드하지 않습니다. 스텁에 바이너리를 연결하여 int main 전에 자동으로로드했습니다.

분명히 프로그램을 다시 설치해도 문제가 해결되지 않습니다. 나에게 그것은 봉쥬르를 설치해야한다고 분명히 말하지만, 대부분의 사용자에게는 이것이 극도로 비밀 스럽다.

"이 응용 프로그램이 제대로 작동하려면 Bonjour를 설치해야하며,이 파일을 다운로드하려면 [insert-url-here]로 이동하십시오."와 같은 오류 메시지가 필요합니다.

dll이 DLL을로드하지 못하고 더 나은 오류 메시지를 표시하지 못하는 경우를 감지하는 방법이 있습니까?

+2

왜 설치에 Bonjour를 포장하지 않는, 또는 비슷한 (사용중인 설치 프로그램의 종류를 모르고 어떻게 말할 수 없다)? –

+1

좋은 생각. 사람들은 그것이 무엇인지 모르기 때문에 그것을 제거하는 경향이 있습니다. 또한 번거 롭고 더 복잡하고 연약한 설치 프로그램을 만들 것입니다. Bonjour가 이미 설치되어 있다는 사실을 알아 내야 만합니다. – vidstige

+1

그래서 더 복잡하고 연약한 응용 프로그램을 선호합니까? 좋은 설치 프로그램 프레임 워크는 이러한 문제의 대부분을 해결할 강력한 솔루션을 제공합니다. 이것은 미해결 문제가 아닙니다. –

답변

5

로드가 지연되도록 설정 한 다음로드가 발생할 때까지 가능한 한 빨리로드 라이브러리에서 LoadLibrary로로드하고 문제를보고하십시오.

http://msdn.microsoft.com/en-us/library/151kt790.aspx

+0

기본적으로 스텁에 연결된 DLL이로드되지 않는 경우를 감지 할 방법이 없다고 말하는 것입니까? – vidstige

+1

로드가 자동으로 실행되도록하는 경우에는 그렇게 생각하지 않지만 링크 설정을 변경 한 다음 몇 줄의 코드를 추가하면 가능합니다. –

+1

실제로 GetProcAddress 또는 이와 유사한 것을 통해 호출 할 필요는 없습니다. 라이브러리가 있는지 확인하기 위해로드 할 것입니다. 그러면 일반적으로로드 프로세스가 성공한다는 것을 알고있는 것처럼 함수를 호출합니다. 지연로드는 런타임에 LoadLibrary가 실제로 DLL을 사용할 때까지 이동합니다. –