Q&A

  • dll에서 Data를 넘길때...(메모리맵 사용)
dll에서 여러개의 Data를 Main으로 넘길려고 합니다.
현재는 Record로 정의한다음 레코드로 넘겨주는데,
이것을 메모리맵을 사용해서 메인에서 읽어오려고 합니다.

dll에서 CreateFileMapping / MapViewOfFile를 통해서
Data를 메모리에 쓰고,
Main에서 OpenFileMapping /MapViewOfFile를 통해서 Data를 읽어오려고
하는데,, 막상 Data를 읽어올때 OpenFileMapping의 리턴값으로 받는 핸들이
0으로 나오네요...
dll에서 메모리맵의 사용은  일반 exe화일에서 쓰는 메모리맵의 사용법과
다른가요?
지금 exe에서 샘플로 테스트 할때는 잘 되거든요.
고수님들 좀 알려주세요
1  COMMENTS
  • Profile
    미소나눔 2003.06.17 19:34
    // dll 초기화에 맵 오브젝트 생성하구..
    initialization
        hMapObject := CreateFileMapping(INVALID_HANDLE_VALUE,
                                        nil,
                                        PAGE_READWRITE,
                                        0,
                                        1024,
                                        'IDP');

        if GetLastError = ERROR_ALREADY_EXISTS then Halt;
        pMapView1 := MapViewOfFile(hMapObject, FILE_MAP_WRITE, 0, 0, 1024);

    finalization
        UnmapViewOfFile(pMapView1);
    ......
    en.

    // 원하는곳에 생성시킨 공유 메모리에 'IDP'로 다시 맵핑해보시면...원인파악은 될듯.... ^^:

        hMapOpenObject := OpenFileMapping(FILE_MAP_ALL_ACCESS, false, 'IDP');
        pMapView2 := MapViewOfFile(hMapOpenObject, FILE_MAP_ALL_ACCESS, 0, 0, 1024);

    짧은지식.