2017-12-12 19 views
0

v120_xp 도구 세트를 사용하여 VS 2013에서 프로젝트를 빌드 할 때 LoadLibrary ("my.dll")가 올바르게 반환됩니다. 그러나 VS 2017에서 v141_xp 도구 세트 (플랫폼은 7.1 임)에서는 NULL과 오류 코드 4250을 반환합니다. 두 번 모두 깨끗한 빌드를해야했습니다.LoadLibrary가 오류 4250과 함께 실패합니다.이 작업은 응용 프로그램 컨테이너의 컨텍스트에서만 유효합니다.

LoadLibrary (F11)를 사용할 수 없습니다.

입니다 ProcessMonitor이 RegQueryValue 마이크로 소프트 \ WINDOWS \ CurrentVersion을 \ SideBySide \ PreferExternalManifest \ HKLM \ 소프트웨어를 찾을 수 없음하여 CreateFileMapping와 이름 만 독자들과 잠긴 파일을 보여줍니다 라인을 실행하지만, 그 모든 성공

DUMPBIN/헤더 후 두 버전의 my.dll에 동일

종속성 워커에는 순환 종속성, 확인되지 않은 내보내기 등의 오류가 있지만 작동하는 2013 버전에는 동일한 오류가있는 것으로 보입니다. VS 2017 my.dll에는 추가 종속성 UCRTBased.dll, vcruntime140d.dll이 있습니다.

my.dll은 부스트 ​​1.64 & TBB에 정적으로 연결되어 있지만 둘 다 Windows 저장소 또는 범용 옵션없이 빌드되었습니다. 윈도우 10과 cmake 3.8을 사용하고 있습니다. VS 솔루션을 생성하는 cmake 파일은 변경되지 않습니다. 여기

종속성 워커 프로파일입니다 :이 프로그램은 당신이 당신의 프로그램이 전류를 변경하지 않는 경우 프로젝트 설정의 디버깅 섹션 (작업 디렉토리 생각하는 곳에서 실행

LoadLibraryA("my.dll") called from "d:\myproject\x64\debug\my.EXE" at address 0x00007FF7FCED1DA2. 
Loaded "d:\myproject\x64\debug\my.DLL" at address 0x00007FFA49D40000. Successfully hooked module. 
Loaded "d:\myproject\x64\debug\abc.DLL" at address 0x00007FFA45190000. Successfully hooked module. 
Loaded "c:\windows\system32\OLEAUT32.DLL" at address 0x00007FFA839F0000. Successfully hooked module. 
Loaded "c:\windows\system32\MSVCP_WIN.DLL" at address 0x00007FFA83010000. Successfully hooked module. 
Loaded "c:\windows\system32\OLE32.DLL" at address 0x00007FFA83750000. Successfully hooked module. 
Loaded "d:\myproject\x64\debug\def.DLL" at address 0x00007FFA67FD0000. Successfully hooked module. 
Loaded "d:\myproject\x64\debug\TBB_DEBUG.DLL" at address 0x00007FFA62BE0000. Successfully hooked module. 
Unloaded "d:\myproject\x64\debug\abc.DLL" at address 0x00007FFA45190000. 
Unloaded "d:\myproject\x64\debug\TBB_DEBUG.DLL" at address 0x00007FFA62BE0000. 
Unloaded "c:\windows\system32\MSVCP_WIN.DLL" at address 0x00007FFA83010000. 
Unloaded "c:\windows\system32\OLEAUT32.DLL" at address 0x00007FFA839F0000. 
Unloaded "c:\windows\system32\OLE32.DLL" at address 0x00007FFA83750000. 
Unloaded "d:\myproject\x64\debug\def.DLL" at address 0x00007FFA67FD0000. 
Unloaded "d:\myproject\x64\debug\my.DLL" at address 0x00007FFA49D40000. 
LoadLibraryA("my.dll") returned NULL. Error: This operation is only valid in the context of an app container (4250). 
+0

의존성 워커를 잊어 버리십시오. 시대에 따라 업데이트되지 않았으며 Windows 7에 도입 된 리팩터링 된 시스템 모듈을 완전히 해결하지 못했습니다. 결과물은 종종 오도 된 내용입니다. 대신 사용중인 코드와 오류 코드를 확인하는 방법을 보여줍니다. – IInspectable

답변

0

확인하는 것이 디렉토리 자체).

+0

예. 올바른 디렉토리입니다. 프로세스 모니터 및 로그 메시지에서 전이로드 라이브러리 호출을 볼 수 있습니다. my.dll의 DllMain 중단 점에 도달하지 않습니다. –