공유 메모리를 이용한 프로그램을 하나 작성하려 하는데, 님의 소스가 있어 실행하여 보았습니다.
그런데 잘 안되는 부분이 있어 질문을 드립니다.
아래 소스로 생성한 실행파일을 두개 띄워서 통신하였을때(프로그램을 두개 띄웠을 때),
정수 Data는 이상이 없는데, 한쪽에서 문자열 형태로 보내면 다른 실행 프로그램에서 그 값이 아닌 이상한 쓰레기 값으로 읽어들이더라구요.
Data Type 때문인것 같은데, 아래 소스 방식으로 문자열도 주고 받을수 있는 방법은 없는지요? 고수님들의 조언 부탁드립니다.
implementation
{$R *.dfm}
var
MyMapObj, OtherMapObj, OpFMap : THandle;
Value : ^Integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyMapObj := CreateFileMapping(INVALID_HANDLE_VALUE,
nil,
PAGE_READWRITE,
0,
1024,
'MyMapObj');
OtherMapObj := CreateFileMapping(INVALID_HANDLE_VALUE,
nil,
PAGE_READWRITE,
0,
1024,
'OtherMapObj');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// 선택된 공유메모리 영역을 불러옵니다.
Case RadioGroup1.ItemIndex of
0 : OpFMap := OpenFileMapping(FILE_MAP_WRITE, False, 'MyMapObj');
1 : OpFMap := OpenFileMapping(FILE_MAP_WRITE, False, 'OtherMapObj');
end;
Value := MapViewOfFile(OpFMap, FILE_MAP_WRITE, 0, 0, 0);
Value^ := StrToInt(Edit1.Text);
UnmapViewOfFile(Value);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// 선택된 공유메모리 영역을 불러옵니다.
Case RadioGroup1.ItemIndex of
0 : OpFMap := OpenFileMapping(FILE_MAP_READ, False, 'MyMapObj');
1 : OpFMap := OpenFileMapping(FILE_MAP_READ, False, 'OtherMapObj');
end;
Value := MapViewOfFile(OpFMap, FILE_MAP_READ, 0, 0, 0);
Showmessage(IntToStr(Value^));
UnmapViewOfFile(Value);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseHandle(MyMapObj);
CloseHandle(OtherMapObj);
CloseHandle(OpFMap);
end;
메모리 맵드 강좌가 있었던것 같은데..
여기 아니면 델마당인가하는 곳에서 본걸로 기억남니다.
즐푸~