네이티브 C++로 작성된 DLL이 있습니다. Visual Studio 프로젝트 이름은 MyDll
이고 출력 디렉터리에 MyDll.dll
이라는 파일로 컴파일됩니다.DLL의 이름을 변경하면이 DLL을 사용하는 코드가 손상됩니다.
편집 후에는 MyDll2.dll
으로 이름을 바꿉니다. 이 예제는 어리석은 것처럼 보이지만 이름을 바꿀만한 이유가 있습니다.
C++/CLI로 작성된 두 번째 프로젝트는이 DLL을 사용합니다.
이 프로젝트는 컴파일 타임에 dll에 정의 된 클래스를 사용할 수 있도록 MyDll.lib
(MyDll 컴파일시 생성됨)을 참조합니다.
런타임에 DLL을로드하기 위해 LoadLibrary를 호출하여 파일 C:\...\MyDll2.dll
의 전체 경로 (실제로는 같은 폴더에 있음)를 전달합니다. LoadLibrary의 반환 값에 표시된대로 성공적으로로드됩니다.
DLL에서 정의 된 클래스를 사용하는 코드에서 처음으로 (스택에있는 객체를 선언하는 것) SEHException
으로 충돌합니다 (이러한 예외는 충돌의 원인에 대해 아무런 정보도 제공하지 않습니다 ...).)
이름 바꾸기 단계를 수행하는 경우에만 발생합니다. MyDll.dll
으로두고 해당 파일에서 LoadLibrary를 호출하면 모든 것이 잘 동작합니다. 분명히 이름 바꾸기 때문입니다.
왜 그런가? DLL의 이름을 바꿀 수 없습니까?
(편집 : 더 자세한 정보를 제공하여 명확히)
가로드 된 것 후 왜 당신은 DLL 이름을 바꾸는
응용 프로그램에 해당 DLL에 대한 핸들이 있습니까 (Procexp를 사용하여 알 수 있음)? – Benoit