본문 바로가기
C++ 200제/코딩 IT 정보

[MFC강좌] 메모리맵 파일 소스, WinCE(windows embedded compact)

by vicddory 2017. 1. 20.

[MFC강좌] 메모리맵 파일 소스, WinCE(windows embedded compact)


MMF(Memory Map File)를 구현한 소스로 MFC강좌 알려드립니다. WinCE MMF는 메모리맵파일(메모리 관리 기법)로 프로그래밍 강좌에서 메모리 관리 기법으로 주로 소개하는 것입니다. 간단한 이론은 구글에서 검색하시면 되고, 이 포스트에선 소스를 제공하며 간단히 주요 소스를 언급합니다.


일단, WinCE 메모리맵파일을 이용해 메모리에 읽고 쓰는 프로그램 UI는 아래와 같습니다.


[MFC강좌] 메모리 맵 파일 소스, WinCE(windows embedded compact)[MFC강좌] 메모리 맵 파일 소스, WinCE(windows embedded compact)


bbb는 쓰는 프로그램이고, aaa는 읽는 프로그램입니다.

아래 첨부한 MFC강좌용 예제 소스는 MMF를 구현한 것인데, 읽기 쓰기 모두 됩니다. 하지만, 윈도우7과 윈도우CE(windows embedded compact) 구현 소스는 조금 달라요. 자세한 내용 메모리맵파일 내용은 그 아래에 있습니다.


윈도우 XP, 윈도우7 MMF 소스

링크 - MMF.zip


윈도우 CE(wince) MMF 소스

링크 - MMF - RW(CE).zip


XP나 7용 MMF 소스는 CE용과 조금 다릅니다. 우선, 윈도우 XP/7에서 쓰는 소스를 살펴보며 MFC강좌 시작합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void CbbbDlg::OnBnClickedButton1()
{
    UpdateData(TRUE);
 
    BOOL bEnd = FALSE;
    LPSTR lpMapping;
 
    // 매핑 파일 만들기
    hMemMap = CreateFileMapping((HANDLE)0xFFFFFFFF,
        NULL, PAGE_READWRITE, 01024, _T("uuu"));
 
    // 파일에 매핑하기
    lpMapping = (LPSTR)MapViewOfFile(hMemMap,
        FILE_MAP_ALL_ACCESS, 000);
 
    if (lpMapping == NULL)
        TRACE(_T("ERROR\r\n"));
 
    char charArr[1024];
    strcpy_s(charArr, 1024, (char*)_bstr_t(strContent));
 
    //strcpy(szData, strContent);
    strcpy(lpMapping, charArr);
 
    UnmapViewOfFile(lpMapping);
}
 
cs


CreateFileMapping() 함수를 이용해 메모리맵에 매핑할 파일을 만들고, MapViewOfFile() 함수에 인자로 넘깁니다. 만약 lpMapping 변수가 NULL이 아니라면 정상입니다. 


다음은 읽는 소스인데 전체 메모리 관리 기법에서 손이 가장 많이 가는 부분이기도 합니다. 전체 맥락은 쓰는 것과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void CaaaDlg::OnBnClickedButton1()
{
    LPSTR    lpMapping;
 
    // 매핑 파일 열기
    hMapRead = OpenFileMapping(
        FILE_MAP_ALL_ACCESS, FALSE, _T("uuu"));
 
    // 파일에 매핑하기
    lpMapping = (LPSTR)MapViewOfFile(hMapRead,
        FILE_MAP_ALL_ACCESS, 000);
    
    CString abc;
    abc = CA2CT(lpMapping);
 
    mStcContent.SetWindowText(abc);
    
    UnmapViewOfFile(lpMapping);
}
cs


WinCE OpenFileMapping() 함수를 이용해 값을 읽기 위한 변수를 설정하고, MapViewOfFile() 함수로 실제 데이터를 얻어 옵니다. 두 경우 모두 UnmapViewOfFile() 함수로 메모리 해제하는 것도 같죠.


이번 MFC강좌 마지막 부분으로, Window CE에서 사용하는 소스인데 조금 달라요.


1
2
3
4
5
6
7
// 매핑 파일 만들기
hMemMap = CreateFileMapping((HANDLE)0xFFFFFFFF,
        NULL, PAGE_READWRITE, 01, _T("STATUS"));
 
// 매핑 파일 열기
hMapRead = CreateFileMapping(hMemMap, NULL,
        PAGE_READWRITE, 01, _T("STATUS"));
cs


매핑 파일 만드는 소스, 메모리 시작 번지 소스가 조금 다르네요. 이 부분만 다르고 전체적으론 다 똑같습니다.


제가 위에 적은 메모리맵파일 주요 소스 부분만 참조하시고, 전체 소스는 프로젝트 다운 받아 보세요. 메모리 관리 기법을 좀 챙겨야 유연한 프로그래밍할 수 있어요.


[MFC강좌] 메모리맵 파일 소스, WinCE(windows embedded compact)

댓글