C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[27988] 샘플입니다.
김성진.kark [kark] 1010 읽음    2003-11-26 17:05
C++ Builders Developer's Journal 의 기사에서 소스부분만 올립니다. 쉽게 하실수 있을겁니다.
프로그램을 2개 만듭니다. server, client. 각각 메모, 버튼 등을 올려놓고 아래와 같이 코딩하
시면 테스트 할 수 있습니다. 그럼..


Using Windows file mapping for inter-process communications, Part 1
by Mark G. Wiseman

Listing A: ServerMain.h

class TServerForm : public TForm
{
  __published:
    TMemo *Memo1;
    TButton *CloseBtn;
    TTimer *Timer;
     
    void __fastcall OnTimer(TObject *Sender);
    void __fastcall Exit(TObject *Sender);

  public:
    __fastcall TServerForm(TComponent* Owner);
    __fastcall ~TServerForm();

  private:
    char *memmap;
    HANDLE fmHandle;     
};
Listing B: ServerMain.cpp

#include <vcl.h>
#pragma hdrstop

#include "ServerMain.h"

#pragma package(smart_init)
#pragma resource "*.dfm"

TServerForm *ServerForm;

__fastcall TServerForm::TServerForm(
  TComponent* Owner) : TForm(Owner)
{
  Caption = Application->Title;

  fmHandle = CreateFileMapping(
    (HANDLE)0xFFFFFFFF, 0,
    PAGE_READWRITE, 0, 1024,
    "ReisdorphDemoFileMap");
  if (fmHandle == 0)
  {
    ShowMessage("Unable to create File Mapping.");
    Application->Terminate();
  }

  memmap =
    (char *)MapViewOfFile(fmHandle,
      FILE_MAP_ALL_ACCESS, 0, 0, 0);

  if (memmap == 0)
  {
    ShowMessage("Error!");
    Application->Terminate();
  }

  *memmap = 0;
}

__fastcall TServerForm::~TServerForm()
{
  if (memmap != 0)
    UnmapViewOfFile(memmap);

  if (fmHandle != 0)
    CloseHandle(fmHandle);
}

void __fastcall TServerForm::OnTimer(
  TObject *Sender)
{
  if (*memmap != 0)
  {
    Memo1->Lines->Text = memmap;
    *memmap = 0;
  }
}

void __fastcall TServerForm::Exit(TObject *Sender)
{
  Close();
}

Listing C: ClientMain.h

class TClientForm : public TForm
{
  __published:
    TMemo *Memo1;
    TButton *SendBtn;
    TButton *CloseBtn;
    void __fastcall Exit(TObject *Sender);
    void __fastcall Send(TObject *Sender);

  public:
    __fastcall TClientForm(TComponent* Owner);
    __fastcall ~TClientForm();

  protected:
    void __fastcall OnIdle(
      TObject *Sender, bool &Done);

  private:
    HANDLE fmHandle;
    char *memmap;
};
Listing D: ClientMain.cpp

__fastcall TClientForm::TClientForm(
   TComponent* Owner) : TForm(Owner)
{
  Caption = Application->Title;

  fmHandle =
    OpenFileMapping(FILE_MAP_ALL_ACCESS,
      false, "ReisdorphDemoFileMap");
  if (fmHandle == 0)
  {
    ShowMessage("Unable to create File Mapping.");
    Application->Terminate();
  }

  memmap =
    (char *)MapViewOfFile(fmHandle,
       FILE_MAP_ALL_ACCESS, 0, 0, 0);
  if (memmap == 0)
  {
    ShowMessage("Unable to map view of file.");
    Application->Terminate();
  }

  Application->OnIdle = OnIdle;
}

__fastcall TClientForm::~TClientForm()
{
  if (memmap != 0)
    UnmapViewOfFile(memmap);
  if (fmHandle != 0)
    CloseHandle(fmHandle);
}

void __fastcall TClientForm::Exit(TObject *Sender)
{
   Close();
}

void __fastcall TClientForm::Send(TObject *Sender)
{
  lstrcpy(memmap, Memo1->Text.c_str());
  Memo1->Clear();
}

void __fastcall TClientForm::OnIdle(
  TObject *Sender, bool &Done)
{
  SendBtn->Enabled =
    Memo1->Lines->Text.IsEmpty() == false;
}

+ -

관련 글 리스트
27967 Memory Mapped File 을 이용한 예제 하나 만들어 주세요. 강영준 1008 2003/11/24
27988     샘플입니다. 김성진.kark 1010 2003/11/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.