이 소스는 [델파이의 모든것] - 인포북 -에서 메모리파일맵핑 예제입니다.
이 예제에서 ShareMem 유닛선언을 실행시에는 에러가 안나는데...종료시..
런타임에러가 발생합니다. (Invilid Pointer에러) 어떤식으로 해결 가능한지..
알고 싶습니다. 그럼.
(*************** 소스 ***************)
unit U_Exam2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ShareMem;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
hFileMap: THandle;
MapError: Integer;
SharedPChar: PChar
end;
const
CharLen = 100;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
hFileMap := 0;
SharedPChar := nil;
try
hFileMap
:= CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, CharLen + 1,
'SampleMMF');
if hFileMap = 0 then
raise Exception.Create('메모리 맵 파일 생성에 실패했습니다 !')
else
MapError := GetLastError();
SharedPChar
:= PChar(MapViewOfFile(hFileMap, FILE_MAP_READ + FILE_MAP_WRITE, 0, 0, 0));
if MapError <> ERROR_ALREADY_EXISTS then
StrPLCopy(SharedPChar, '샘플입니다 !', CharLen);
Edit1.Text := SharedPChar;
except
on E: Exception do begin
if SharedPChar <> nil then
UnmapViewOfFile(SharedPChar);
if hFileMap <> 0 then
CloseHandle(hFileMap);
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnmapViewOfFile(SharedPChar);
CloseHandle(hFileMap);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := SharedPChar;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
StrPLCopy(SharedPChar, Edit1.Text, CharLen);
end;
end.