WINXP에서 DWMAPI.DLL 지연로드 종속성을 수정하는 방법은 무엇입니까?

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

  •  05-07-2019
  •  | 
  •  

문제

winxp 아래에서 .dll을 만들었습니다. Winxp가로드 될 때 Dwmapi.dll을 찾을 수 없다고 주장했습니다. 문제는이 DLL이 Vista DLL이며 IE7이 설치된 XP 사용자에게 알려진 문제입니다. 권장 사항은 프로그램 추가/제거를 통해 IE7을 제거하거나 .NET 프레임 워크를 수리하는 것입니다. 나는 수리를했고 아무것도 바뀌지 않았다. "Wind

나는 IE7을 제거하려고 시도한 사람들에 대해 나쁜 것들을 읽었으므로 그 길을 가기를 꺼려합니다.

Visual Studio 2003 (7.1)에서 C ++를 사용하고 있습니다. 애플리케이션 출시시 강제 지연 로딩이있을 수있는 옵션이 표시되지 않습니다. DLL 프로젝트를 만들 때 기본 설정을 사용했습니다. 방금 흥미로운 옵션 인 링커-> 입력-> 지연로드 된 DLL을 찾았으므로 DWMAPI.DLL을 지연으로 강제로 배치했습니다. 그러나 링크 할 때 이것을 얻습니다.

LINK : warning LNK4199: /DELAYLOAD:dwmapi.dll ignored; no imports found from dwmapi.dll

.. 물론 DLL을로드하려고 할 때는 변경되지 않았습니다. 그것의 도대체, 나는 dwmapi.dll로 이어지는 dlls의 전체 나무를 추가하고 같은 메시지를받습니다. (레코드의 경우, 그것은 Foundation.dll-> shell32.dll-> shdocvw.dll-> mshtml.dll-> ieframe.dll-> dwmapi.dll.)입니다.

내가하고있는 일에 대해 더 구체적으로 말하면, 나는 Maya 플러그인을 작성하고 있으며 스크립트 편집기에서 항상 텍스트를 얻습니다.

// Error: Unable to dynamically load : D:/blahblahblah/mydll.mll
The specified module could not be found.
 //
// Error: The operation completed successfully.
 //
// Error: The operation completed successfully.
 (mydll) //

나는 의존성 워커를 사용하여 처음에 문제를 추적했는데, 그것이 저를 dwmapi.dll로 이끌었습니다. 이것들은 메시지가 나에게 주어지고 dwmapi.dll은 그 옆에 노란색 물음표가있는 유일한 것입니다.

Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

제랄드가 옳다. Maya는 실제로 의존성 워커와 다른 경로를 사용하고 있습니다. 내 플러그인은 Maya 플러그인 디렉토리에 살고있는 다른 DLL (이미지 처리를 위해)을로드하고 문제없이 찾았지만 Maya는 그렇지 않았습니다. Maya.env의 경로에 "; 플러그인"을 추가해야했습니다.

이 문제는 결국 DWMAPI.DLL과 관련이 없지만 DWMAPI는 일반적인 문제이므로 Novell 웹 사이트에서 DWMAPI 문제에 대해 찾은 최고의 링크를 게시하겠습니다. 여기. 기본적으로, 대부분의 프로그램은이 경고가 fexens.exe에 있지만, 옆에 지연로드 아이콘이 있으면 프로그램이 DWMAPI를 직접 또는 간접적으로 호출하지 않으면 괜찮습니다. 문제는 다른 곳입니다. Delay-Load Icon이 존재하지 않으면 Visual Studio에서 /Delay 및 /Delayload 옵션을 살펴 봐야합니다. "오류"가 아닌 "경고"를 주었다는 사실은 DWMAPI가 자동으로로드되지 않았다는 사실에 대한 단서였습니다.

도움이 되었습니까?

해결책

업데이트 된 문제를 기반으로 DWMAPI.DLL은 아마도 문제가 아닐 것입니다. 종속성 워커는 항상 지연 DLL을 점검하므로 MSHTML에 연결할 때마다 항상 해당 오류를 제공합니다.

이 시점에서 가장 좋은 추측은 런타임 라이브러리를 동적으로로드하도록 프로젝트를 설정하고 DLL의 검색 경로가 Maya에 의해 변경되고 있다는 것입니다. 따라서 MSVC 런타임 DLL을 찾을 수 없습니다. 오랫동안 Maya 플러그인을 개발하지는 않았지만 최근 플러그인 DLL이있는 다른 앱에 문제가있었습니다.

C/C ++-> 코드 생성-> 런타임 라이브러리에서 설정을 멀티 스레드 DLL이 아닌 멀티 스레드로 변경해보십시오.

그 외에도 종속성 워커를 사용하여 Maya와 동일한 검색 경로를 사용하고 다른 종속성 문제를 일으킬 수 있는지 확인할 수 있습니다.

최후의 수단은 디버거에서 Maya를 발사하고 Loadlibrary에서 중단 점을 설정하고 어떤 라이브러리가 그렇게로드되지 않았는지 알아낼 수 있습니다.

다른 팁

이것은 까다로운 것입니다. 이 오류를 얻을 수있는 두 가지 주요 방법이 있습니다.

1) 지연로드 된 DLL을 강제로로드 한 DLL을 응용 프로그램 시작시로드하도록 프로젝트를 설정했습니다. DWMAPI.DLL은 지연로드 된 DLL이므로 기능 중 하나가 호출되지 않으면 일반적으로로드되지 않습니다. DLL에서 시도하지 않는 한 XP에서는 발생하지 않습니다. 그러나 앱이 지연로드 된 DLL을로드하도록 강제로 컴파일러 옵션을 설정할 수 있습니다. 당신이 그렇게한다면,하지 마십시오.

2) 종종 Depend.exe에서 얻을 수있는 잘못된 오류입니다. 다른 문제가있을 때. 종속성 워커를 통해 DLL을 실행하고 다른 종속성 문제가 있는지 확인하십시오. 다른 모든 것이 실패하면 IE7을 제거하고 문제가 지속되는지 확인하십시오. 잘못된 오류 인 경우 IE7을 설치 한 후 실제 오류가 표시됩니다. 나중에 IE7을 다시 설치할 수 있습니다.

나는이 문제가 정확히 있었다.

해결하는 데 몇 시간이 걸린 교활한 문제.

그래도. 릴리스 머신에서 관리되는 C ++ 응용 프로그램을 컴파일했습니다. 실행할 수없는 고객으로부터 불만을 제기했으며 모든 기계에서 매력처럼 일했습니다.

릴리스 머신은 한 달 전에 ATL 취약성 수정으로 자동으로 패치되었으며 XP 기계 하나를 제외한 다른 모든 컴퓨터도 마찬가지였습니다.

해당 DecularAre XP 머신은 응용 프로그램을 실행할 수 없습니다. ATL 수정 (아래 링크 참조)을 설치하고 Voilá는 모든 것이 이전처럼 작동했습니다.

http://www.microsoft.com/downloads/details.aspx?familyid=766a6af7-ec73-40ff-b072-9112bab119c2&displaylang=en

따라서 교훈을 얻으려면 항상 중간 매니페스트 (디버그 또는 릴리스 디렉토리를 찾았습니다)를 확인하면 프로그램이 연결된 DLL 버전을 알려줍니다.

그것이 누군가를 돕기를 바랍니다.

C/C ++-> 코드 생성-> 런타임 라이브러리에서 설정을 멀티 스레드 DLL이 아닌 멀티 스레드로 변경해보십시오.

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