Microsoft Visual Studio 2015 (v14.0)
3 가지 프로젝트가 포함 된 솔루션이 있습니다.런타임 라이브러리 옵션이 런타임에 변경되는 효과
그 중 두 프로젝트는 DLL이고 다른 DLL은 실행 파일입니다.
실행 파일은 런타임에 DLL을로드하고 함수를 호출하며 매개 변수를 교환합니다. Window의 LoadLibrary
및 GetProcAddress
API를 사용합니다.
모드에서 모드에서 내 프로젝트의 Runtime Library
을 Multi-threaded DLL
으로 설정하면 모든 것이 정상적으로 작동합니다. Debug
모드의 경우 Multi-threaded Debug DLL
입니다.
내가 Debug
에 대한 Release
또는 Multi-threaded Debug
에 대한 Multi-threaded
로 변경하면 내가 디버그 어설 션 오류 또는 메모리 액세스 위반 오류 및 오류의 다른 종류를 받기 시작. (변경하면 솔루션의 모든 프로젝트에서 변경됩니다.)
Multi-threaded
옵션을 사용해야 만 대상 컴퓨터에서 C++ 런타임 라이브러리가 필요하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?
작성한 내용에 약간의 오해가 있습니다. 주소 공간은 프로세스 단위이며 DLL *은 항상 동일한 주소 공간을로드 한 프로세스와 동일한 프로세스에서로드 된 다른 DLL과 공유합니다. 동일한 프로세스 내 다른 곳에서 하나의 DLL 함수에 할당 된 메모리에 액세스하는 것은 완벽하게 안전합니다. '/ MT'는 하나의 DLL에서 코드에 메모리 ('new')를 할당 한 다음 다른 DLL의 코드에서 해제 ('delete')합니다. 왜냐하면'/ MT'는 각 DLL이 자체적으로 가지고 있기 때문입니다 CRT 사본은 정적으로 링크되어 있습니다. 예를 들어 [이 답변] (http://stackoverflow.com/a/8157934)을 참조하십시오. – dxiv
@dxiv 당신 말이 맞아요, 코멘트 주셔서 감사합니다. 나는 대답을 수정했다. –