MFC에서 동적 DLL을 만들고 Dialog 등을 만들어 사용할 때 DLL 함수의 첫 라인에 이 매크로 함수를 써야 한다.
예들들어 Sample Dialog를 만들어 DoModal()로 화면에 표시를 하려고 하는데 DoModal()이 -1로 리턴하며 화면에 표시되지 않는 경우를 확인 할 수 있다.
원인을 찾지 못하다가 타 소스를 참조해서 확인했다.
맨처음 제작했을 때에는 아래와 같이 만들었었다.
int ShowSampleDlg() ///< DLL 함수 return nReturn; |
그런데 dlg.DoModal()을 하고 바로 -1 리턴을 하는 것이다. 당연히 화면에 표시되는 것도 없다.
아래와 같이 매크로 함수를 추가하고 dlg에 parent를 넣어 주었다.
int ShowSampleDlg() ///< DLL 함수 CSampleDlg dlg( AfxGetMainWnd() ); int nReturn = dlg.DoModal(); if( nReturn == IDOK ) return nReturn; |
DLL의 리소소를 정상적으로 사용하기 위해서는 AFX_MANAGE_STATE( AfxGetStaticModuleState() ); 매크로 함수를 추가해야 한다고 하는군요.
For exported functions from a DLL, such as one that launches a dialog box in your DLL, you need to add the following code to the beginning of the function:
AFX_MANAGE_STATE(AfxGetStaticModuleState( )) |
'MFC' 카테고리의 다른 글
Switch MDI Active (0) | 2019.11.15 |
---|---|
Ethernet Status Check WinAPI (0) | 2019.07.02 |
MFC Error C2248 (CSocket 상속 클래스 사용할 때 에러 발생) (0) | 2019.05.03 |
MFC 투명 툴바, 아이콘 제작 방법 (0) | 2018.07.10 |
View Background Color(배경색) 변경하기 (0) | 2018.06.22 |