Q&A

  • 메모리 맵 질문입니다..
부디 답변 해주시길 부탁드립니다. ㅠ.ㅠ

보통 메모리 맵 사용시 레코드를 사용하여 메모리 맵에 쓰고 읽고를 하는데요.

레코드 2개를 메모리 맵에 기록했을 경우,

읽는 부분에서 레코드별로 읽을 방법이 있을까요??

예를 들어 다음과 같은 레코드를 메모리 맵에 적었을 경우,

TVersionInfo = record
  szVersion : array[0..5] of Char;
  ...
end;

pVersionInfo = ^TVersionInfo ;


메모리 맵에서 읽는 부분에서는
var
  stTemp : String;
  pVersion : pVersionInfo ;
begin
  pVersion := MapViewOfFile(FMMF, FILE_MAP_READ, 0, 0, 0);

  stTemp := pVersion .szVersion ;
end;

이렇게 하여 레코드를 바로 읽으면 되는데요..

다음과 같이 레코드 2개를 기록했을 경우는

TVersionInfo = record
  ...
  ...
end;

TInitInfo = record
  ...
  ...
end;

읽는 부분에서는 레코드 한개일때와 동일하게 읽어서는 안될거 같은데요.. 어떻게 처리를 해야 하나요?

그냥 이런식으로
var
  p_Data : pChar;
begin
  p_Data := MapViewOfFile(iHandle, FILE_MAP_READ, 0, 0, 0);

이렇게 해서 p_Data에는 메모리맵 전체를 리턴받아, 거기서 기록된 순서대로 파싱을 하여 읽어야 하는건가요?

제발 도움 부탁드립니다. ㅠ.ㅠ
1  COMMENTS
  • Profile
    최용일 2008.03.04 06:08
    쓴 순서대로 Offset을 바꿔서 읽으시면 됩니다. 끝에서 두번째와 세번째 파라매터가 옵셋입니다. 물론 전체를 다 읽어서 처리하셔도 되구요...

    pVersionInfo := MapViewOfFile(FMMF, FILE_MAP_READ, 0, 0, SizeOf(pVersionInfo^));
    pInitInfo := MapViewOfFile(FMMF, FILE_MAP_READ, 0, SizeOf(pVersionInfo^), SizeOf(pInitInfo^));