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
[57367] 한대의 PC에서 두개의 appcation 데이터 교환방법이 궁금합니다.
장현건 [] 1099 읽음    2009-06-22 20:55
안녕하십니까

입문 일년 반째 되는 "아직도"초보 빌더 유저입니다.

1번 프로그램에서 이미지를 찾고 2번 프로그램에서 그 이미지를 처리한 후 처리한 이미지를 1번 프로그램에 디스플레
이 해주는 프로그램을 작성하고 있는데요.

처음엔 1번 프로그램에서 찾은 이미지를 저장 후-> 저장된 이미지 파일을 2번 프로그램에서 수정후 저장
->다시 1번 프로그램에서 수정된 이미지파일을 Load하는 방법을 생각 했습니다.

하지만 속도도 좀 느리고, 나중에 문제가 발생할거 같은 생각이 들어서, 다른 방법으로

볼랜드 포럼에 나온 DLL을 이용한 메모리 공유를 시도하다가, 너무 어려워서 그만..;;

마지막 방법으로 API 메모리 공유가 생각나서  "API정복"에서 보고

전역으로 함수를 선언하고(호출방법이 콜백이라는 방식을 사용하더군요), 다음과 같은 코드를  작성 하였습니다.

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT ps;
  HWND hTarget;
  char Mes[] = "메모리 맵 파일을 사용하여 두 프로세스가 메모리를 공유하는 예제";

  switch(iMessage){
  case WM_CREATE:
    hEdit = Form_app1->Memo1->Handle;
            //CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
            //WS_VSCROLL | ES_MULTILINE,10,10,500,200,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
    SendMessage(hEdit,EM_LIMITTEXT,MAXSHAREMEMORY,0);
    hFMap=CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
      0,MAXSHAREMEMORY, "MEMSHAREMAPPING");
    PtrInFile=(char*)MapViewOfFile(hFMap, FILE_MAP_ALL_ACCESS, 0, 0, MAXSHAREMEMORY);
    return 0;
  case WM_COMMAND:
    switch(LOWORD(wParam)){
    case ID_EDIT:
      switch(LOWORD(wParam)){
      case EN_CHANGE:
      GetWindowText(hEdit,PtrInFile,MAXSHAREMEMORY);
      hTarget=FindWindow(NULL, "MemShare1");
      if(hTarget)
        SendMessage(hTarget,WM_USER+1,0,0);
      break;
      }
    }
    return 0;
  case WM_USER+1:
      SetWindowText(hEdit,PtrInFile);
      return 0;
  case WM_PAINT:
      hdc=BeginPaint(hWnd, &ps);
      TextOut(hdc,10,220,Mes,strlen(Mes));
      EndPaint(hWnd, &ps);
      return 0;
  case WM_DESTROY:
      UnmapViewOfFile(PtrInFile);
      CloseHandle(hFMap);
      PostQuitMessage(0);
      return 0;
    }
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
함수에 접근이 안되어서
WM_CREATE가 함수보다 생성이 더 빨리되서 그런가 하고 WM_CHAR로 변경하고 글씨를 써 봤으나,
하지만 디버깅 결과 함수를 읽지 조차 않았습니다. ㅠ

혹시 위에 wndproc() 함수를 호출하는 방법이나,

한개의 PC에서 두개의 어플리케이션 끼리 함수를 공유해서 사용하는 법 아시는

고수분 있으시면 답변 부탁드립니다.

-글 너무 길게 써서 죄송합니다. -

+ -

관련 글 리스트
57367 한대의 PC에서 두개의 appcation 데이터 교환방법이 궁금합니다. 장현건 1099 2009/06/22
57381     Re:한대의 PC에서 두개의 appcation 데이터 교환방법이 궁금합니다. 아제나 1625 2009/06/23
57369     Re:한대의 PC에서 두개의 appcation 데이터 교환방법이 궁금합니다. 망치 1425 2009/06/23
57370         Re:Re:한대의 PC에서 두개의 appcation 데이터 교환방법이 궁금합니다. 장현건 1130 2009/06/23
57388             Re:Re:Re:한대의 PC에서 두개의 appcation 데이터 교환방법이 궁금합니다. 김상구.패패루 1256 2009/06/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.