2010-11-24 3 views
11

Windows에서 LoadLibrary를 사용하여 플러그인을 동적으로로드하는 응용 프로그램이 있습니다. 그러나 일부 플러그인에는 데이터베이스 클라이언트 DLL과 같은 다른 종속 DLL이 있습니다. 이러한 DLL을로드하려고 할 때 종속 DLL 중 하나가 존재하지 않으면 불쾌한 Windows 대화 상자가 나타납니다.종속 DLL이 없을 때 LoadLibrary를 사용하여 Windows에 DLL을로드하려고 시도합니다.

"xxx.ddl이 컴퓨터에 없기 때문에 프로그램을 시작할 수 없습니다. 이 문제를 해결하는 프로그램. "

이 대화 상자를 피할 수있는 쉬운 방법이 있습니까? LoadLibraryEx를 사용하여 "그 짜증나는 대화를 나에게주지 않겠다"라는 플래그를 전달할 수 있기를 바랬지 만, 그렇게 느껴지지 않습니다.

내가 원했던 것은 응용 프로그램이 Windows에서 처리하지 않고 오류 메시지를 처리하기 때문입니다. 특히 메시지 텍스트가 올바르지 않은 경우 (프로그램이 시작할 수 없다는 것이 문제가 아닙니다. 프로그램이 아주 행복하게 실행 중입니다.이 플러그인을로드 할 수 없습니다).

필자가 피하고자하는 것은 외부 종속성이있는 플러그인을 다시 작성하여 종속 모듈의 동적로드를 수행 한 다음 엔트리 포인트를 쿼리하도록하는 것입니다.

어쨌든 어떤 제안이라도 감사하게 생각합니다. MSDN에서

+0

'LoadLibraryEx'에는 많은 플래그가 있습니다. – ruslik

+0

ruslik : LoadLibraryEx에는 많은 플래그가 있지만 MSDN에 문서화 된 것이 없으므로이 동작을 제어 할 수 없습니다. –

답변

13

사용 SetErrorMode(). DLL을로드하기 전에 SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS과 함께 사용하고 0과 함께 사용하십시오.

+1

그게 효과가 있습니다. 실제로 LoadLibrary 설명서를 읽지 않는 것이 좋지 않습니다! 비고 섹션의 첫 번째 문장. 도. –

5

:

활성화 또는 DLL로드시 로더에 의해 표시 해제 오류 메시지의 SetErrorMode 기능을 사용합니다.

Link here

관련 문제