Q&A

  • 메모리 파일 메핑시 ShareMem만 쓰면 에러가...
이 소스는 [델파이의 모든것] - 인포북 -에서 메모리파일맵핑 예제입니다.

이 예제에서 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.

0  COMMENTS