/CLR을 사용하여 MFC 응용 프로그램 컴파일 (STEP1 : 동적 DLL에 대한 연결)

StackOverflow https://stackoverflow.com/questions/914448

  •  06-09-2019
  •  | 
  •  

문제

Developer Studio의 이전 버전으로 Conse Studio 2008로 컴파일 된 MFC 응용 프로그램을 성공적으로 업그레이드했습니다. MFC의 일부 변화로 인해 매우 적은 수의 변경이 필요했습니다. 이제 모든 것이 작동하므로 다음 단계를 수행하고 솔루션을 컴파일하고 싶습니다. /clr.

그렇게하기 위해 MSDN 웹 사이트에서 유용한 정보를 찾았습니다.

내가 취한 단계는 다음과 같습니다.

  1. 설정 런타임 라이브러리 에게 멀티 스레드 디버그 DLL (/MDD).
  2. 설정 MFC 사용 에게 공유 DLL에서 MFC를 사용하십시오.

그러나 그렇게하면 프로젝트를 연결하지 못하게됩니다.

  1. 에 대한 참조 afxData 더 이상 해결할 수 없습니다. 어떻게든, afxData MFC와 정적으로 연결할 때만 볼 수 있습니다. 내 코드에는 다음과 같은 선언이 있습니다.

    extern AFX_DATA AUX_DATA afxData;

    정적으로 연결된 MFC 버전에서 잘 작동합니다.

  2. 참조 _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는 종을 울리지 않습니다. 어떻게 사용됩니까? 아마도 그것을 달성하는 새로운 방법이있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top