/CLR을 사용하여 MFC 응용 프로그램 컴파일 (STEP1 : 동적 DLL에 대한 연결)
문제
Developer Studio의 이전 버전으로 Conse Studio 2008로 컴파일 된 MFC 응용 프로그램을 성공적으로 업그레이드했습니다. MFC의 일부 변화로 인해 매우 적은 수의 변경이 필요했습니다. 이제 모든 것이 작동하므로 다음 단계를 수행하고 솔루션을 컴파일하고 싶습니다. /clr
.
그렇게하기 위해 MSDN 웹 사이트에서 유용한 정보를 찾았습니다.
내가 취한 단계는 다음과 같습니다.
- 설정 런타임 라이브러리 에게 멀티 스레드 디버그 DLL (/MDD).
- 설정 MFC 사용 에게 공유 DLL에서 MFC를 사용하십시오.
그러나 그렇게하면 프로젝트를 연결하지 못하게됩니다.
에 대한 참조
afxData
더 이상 해결할 수 없습니다. 어떻게든,afxData
MFC와 정적으로 연결할 때만 볼 수 있습니다. 내 코드에는 다음과 같은 선언이 있습니다.extern AFX_DATA AUX_DATA afxData;
정적으로 연결된 MFC 버전에서 잘 작동합니다.
참조
_afxThreadState
그리고_afxWinState
또한 해결할 수 없습니다.
전체 오류 메시지는 다음과 같습니다.
error LNK2001: unresolved external symbol "struct AUX_DATA afxData" (?afxData@@3UAUX_DATA@@A)
error LNK2001: unresolved external symbol "class CThreadLocal<class _AFX_THREAD_STATE> _afxThreadState" (?_afxThreadState@@3V?$CThreadLocal@V_AFX_THREAD_STATE@@@@A)
error LNK2001: unresolved external symbol "class CProcessLocal<class _AFX_WIN_STATE> _afxWinState" (?_afxWinState@@3V?$CProcessLocal@V_AFX_WIN_STATE@@@@A)
이것이 Mangling이라는 이름과 관련이있는 경우 ...
그래서 MFC와 동적으로 연결하기 위해 무엇을 할 수 있지만 여전히 참조 할 수 있습니다. afxData
, _afxThreadState
그리고 _afxWinState
?
해결책
공유 DLL에서 MFC를 사용하는 경우 AUX_DATA는 dllimport
에드.
extern __declspec(dllimport) AUX_DATA afxData
템플릿 클래스를 사용하지 않고 스레드 상태의 경우이 중 하나를 사용하십시오.
AFX_MODULE_THREAD_STATE* pState = _AFX_CMDTARGET_GETSTATE()->m_thread;
AFX_THREAD_STATE* pState = AfxGetThreadState();
필요한 상태 정보에 따라 예를 들어, 참조하십시오 여기 버그를 수정하기 위해 모듈 상태로 이동 한 일부 멤버의 경우. afxgetModuleThreadState는 존재하지만 문서화되지 않으며 향후 버전에서 변경 될 수 있습니다.
Win State는 종을 울리지 않습니다. 어떻게 사용됩니까? 아마도 그것을 달성하는 새로운 방법이있을 것입니다.