고수님 안녕하세요....
제가 메모리 맵을 이용한 DLL 사이의 데이터 교환을 공부하던중
아래와 같은 소스를 구하게 되었습니다.. 원래소스에서는
정수형의 데이터를 교환하는것이었구요...
제가 교환할 데이터는 스트링형입니다....
그래서 아래와 같이 제가 바꾸었거든요.....
그런제 정수형으로 할때는 잘 작동했는데 스트링형으로 할때는
에러가 나네요....고수님 도와주세요...
var
Form1: TForm1;
implementation
{$R *.DFM}
var
// 메모리 맵 파일의 오브젝트.
FileMapObj : THandle;
// 폼 생성시 메모리 맵 파일 만들기.
procedure TForm1.FormCreate(Sender: TObject);
begin
FileMapObj :=
CreateFileMapping(
$FFFFFFFF, // 파일 연동 안함.
nil, // 보안문제 신경 안 씀.
PAGE_READWRITE, // 읽고 쓸 것임.
0, // 크기 상위 DWORD
SizeOf(Integer), // 크기 하위 DWORD
'메모리 맵 테스트를 위한 공유영역' // 메맵 파일의 이름
);
end;
// 폼 해제시 메모리 맵 파일 지우기.
procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseHandle(FileMapObj);
end;
// 메모리 맵 파일의 데이터 읽기.
procedure TForm1.Button1Click(Sender: TObject);
var
strP : ^string;
begin
strP := MapViewOfFile(FileMapObj, FILE_MAP_WRITE, 0, 0, 0);
try
ShowMessage(strP^);
finally
UnMapViewOfFile(strP);
end;
end;
// 메모리 맵 파일에 데이터 쓰기.
procedure TForm1.Button2Click(Sender: TObject);
var
strp : ^string;
begin
strP := MapViewOfFile(FileMapObj, FILE_MAP_WRITE, 0, 0, 0);
try
strP^ := edit1.text;
finally
UnMapViewOfFile(strp);
end;
end;
end.