Q&A

  • 공유메모리 사용방법 좀....
공유메모리 사용 방법 갈켜주시면 감사 하겠습니다.
예) 두개의 어플리케이션간 데이타 주고 받기
2  COMMENTS
  • Profile
    미소나눔 2003.01.03 21:10
    함 만들어 봤습니다.

    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;

    메모리 맵드 강좌가 있었던것 같은데..
    여기 아니면 델마당인가하는 곳에서 본걸로 기억남니다.
    즐푸~
  • Profile
    델조아 2007.10.04 00:21
    공유 메모리를 이용한 프로그램을 하나 작성하려 하는데, 님의 소스가 있어 실행하여 보았습니다.

    그런데 잘 안되는 부분이 있어 질문을 드립니다.

    아래 소스로 생성한 실행파일을 두개 띄워서 통신하였을때(프로그램을 두개 띄웠을 때),
    정수 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;
    >
    >메모리 맵드 강좌가 있었던것 같은데..
    >여기 아니면 델마당인가하는 곳에서 본걸로 기억남니다.
    >즐푸~