2013-07-30 2 views
1

COM 구성 요소로 배포되거나 .manifest 파일을 사용하여 참조 할 수있는 응용 프로그램에 제 3 자 구성 요소를 사용하고 있습니다. 어느 쪽이든 그것은 CoCreateInstance()를 사용하여로드됩니다. 타사 구성 요소에 필요한 파일은 하위 폴더에 있습니다. 구성 요소 개발자는 실행 파일의 Visual Studio 2010 설정 (Manifest 섹션)에 .manifest 파일을 포함하고 구성 요소를로드해도 문제없이 작동한다고 말했습니다.매니페스트 파일을 dll로 이동 하시겠습니까?

이제 제 3 자 구성 요소에서 사용 된 기능을 캡슐화하기 위해 DLL의 타사 구성 요소 만 사용하고 있습니다. LoadLibrary()를 사용하여 동적으로 DLL을로드하고 있습니다. 여전히 구성 요소를 사용하면 참조 된 매니페스트 파일이있는 EXE에 의해로드 된 DLL 내에서 구성 요소를 사용할 수 있습니다.

세 번째 pary 구성 요소에서 EXE를 더 분리하려면 manifest를 DLL로 옮기고 구성 요소가 사용되는 유일한 위치는 어디입니까? 이런 식으로 모든 새로운 EXE는 DLL을 사용하고 간접적으로 기능을 사용할 수있게 작성하고 싶습니다. 지금은 모든 새 EXE에 mainfest를 추가해야하지만 그렇게하고 싶지는 않습니다.

EXE에서 사용하는 매니페스트를 DLL로 옮기는 방법이 있습니까?

+3

당신은 DLL에 매니페스트를 넣을 수 있지만, 자동으로 활성화되지 않습니다. 활성화 컨텍스트 API를 사용하여 수동으로 수행해야합니다. –

+0

매니페스트에 포함 된 내용을 추측하도록 강요하는 것은 약간 의미가 없습니다. 그러나 당신이 장바구니 뒤에서 말을 넣으려고 할 확률이 높다면 DLL은 EXE가 어디에 있는지 찾아야 만 찾을 수 있습니다. 매니페스트 항목이 EXE에 있어야합니다. DLL에 넣으면 EXE가 DLL을 찾을 수 없으므로 매니페스트를 찾을 수 없습니다. –

+0

EXE는 동적으로 DLL을로드합니다. DLL로드가 작동하지만 DLL 내의 CoCreateInstance() 호출이 실패합니다. – vividos

답변

4

매니페스트를 DLL에 넣을 수는 있지만 자동으로 활성화되지 않을 수 있습니다. 활성화 컨텍스트 API를 사용하여 수동으로해야 할 수도 있습니다. 많은 것이 매니페스트가 사용되는 것에 달려 있다고 생각합니다. 나는 당신이 등록 무료 COM을 사용하려고하는 것으로 의심하지만, 그것은 단지 추측입니다.

어쨌든, 이러한 링크는 잘 당신에게 도움이 될 수 있습니다

+2

그리고 실제로 작동합니다! 그것은 등록 무료 COM의, 나는 아직 몰랐어, 그렇지 않으면 내가 그것을 언급했을 것이다. MFC를 사용할 때 AFX_MANAGE_STATE (AfxGetStaticModuleState())에 일부 호출을 추가해야했습니다. 활성화 컨텍스트 전환을 수행하는 comctl32.dll 함수 호출을 혼동하지 않도록합니다. 감사! – vividos

관련 문제