안녕하세요.
두개의 어플중 하나는 공유메모리에 쓰구요 다른하나는 읽는데요...
정수형으로 할땐 제대로 되는데요 문자열로 하니깐
메모리 에러가 나네요...
*****************************************************
procedure TForm1.FormCreate(Sender: TObject);
begin
FileMapObj2 := CreateFileMapping($FFFFFFFF,nil ,
PAGE_READWRITE,0,SizeOf(string),'MappingArea');
end;
***********************************************************
procedure TForm1.Button1Click(Sender: TObject);
var
strP : Pstring;
begin
strP := MapViewOfFile(FileMapObj, FILE_MAP_WRITE, 0, 0, 0);
try
ShowMessage(strP^);
finally
UnMapViewOfFile(strP);
end;
end;
*****************************************************************
MapViewOfFile은 헬프를 보니깐 return이 매핑된 값의 메모리 시작번지를
리턴한다구 되있는데.. 그럼 어떻게 정수로 할땐 값이 제대루 오나요??
문자열로 공유메모리를 써야 되는데요... 에구.. 너무 부족한지라 안되네요.
가르침 부탁드리겠습니다.
그리구... 혹시.. String말구.. List나 stringList로 할수있는 방법두 부탁드리겠습니다..
string은 객체와 비슷한 성격을 가지고 있어요. string자체가 하나의 포인터입니다. 좀 특별한... string대신에 AnsiString이나 PChar를 쓰세요...
SizeOf(string)는 항상 4바이트라는것 참조하시구요...
메모리맵파일은 데이터를 공유하는 것이지 객체를 공유하는 것이 아니기 때문에 TList, TStringList같은 것은 쓰지 못합니다.
FileMapObj2 := CreateFileMapping($FFFFFFFF,nil ,
PAGE_READWRITE, 0, 256, 'MappingArea'); // Size = 256
procedure TForm1.Button1Click(Sender: TObject);
var
Buf: array[0..255] of Char; // = PChar = zero-based characters
begin
Buf := MapViewOfFile(FileMapObj, FILE_MAP_WRITE, 0, 0, 0);
try
ShowMessage(string(Buf));
finally
UnMapViewOfFile(Buf);
end;
end;
^^ 항상 즐코하세요...