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
[55182] Re:ShellexecuteEx 로 연결된 프로세스로부터 데이터를 받아오는 방법?
장성호 [nasilso] 2632 읽음    2008-11-13 15:55
A프로그램과   B프로그램은 서로 다른 프로그램이지요?

이렇게 서로다른 프로그램간에 통신을 IPC라고 합니다.
(Inter process Communication)

IPC에는 여러가지 방법이 있습니다.

그중에 가장 흔히 쓰이는 것들중에는
  1. socket
  2. pipe
  3. mappingfile
  4. message
   ...

등이 있습니다.


1) socket은 뭐 잘 아실테구

2) pipe는
    그냥 pipe와 namedpipe가 있는데
    그냥 pipe는 프로세서가 서로 종속적인 관계일때 주로 쓰입니다.
   
    예를들어
    커맨트 창(cmd.exe) 에서 ipconfig 명령을 입력했다고 합시다
    그러면 cmd.exe는  pipe를 만들어서 ipconfig.exe 를 실행하면서 표준 입력력으로 pipe를 넘깁니다.
    그러면 ipconfig.exe에서는 그냥 표준출력 print , cout 등으로 출력하기만 하면
    cmd.exe에서 받을수 있죠

    또 namedpipe는 이름이 있는 pipe로 서버 / 클라이언트로 구분할수있는데요
    프로세서가 종속적이지 않아도 되구
    꼭 같은 pc가 아니라도 됩니다.
   
   얼마전에 구글에서 출시한 웹브라우져인 크롬이 멀티프로세서로 만들어졌는데
   프로세서간 통신을 namedpipe로 구현했다고 하더군요

3. mappingfile은
   싶게 표현하면
   A프로세서에서 file에 기록해두고
   B프로세서에서 그 기록된 file에서 읽어오는것입니다.
   
   HOOK같은것 할때 많이 쓰이곤 하더군요

4. message
   윈도우 환경에서는 간단한 것은 가장 흔하게 쓰이는 방식이죠
   FindWindow로 윈도우 핸들을 찾아서
   SendMessage로 message , wparam , lparam 을 보냅니다.
   
   수신하는 측에서 message를 보고 wparam , lparam을 받아서 처리하죠
  
   그런데 wparam , lparam은 각각 long형으로 각 4byte  총 8Byte 밖에 되지 않습니다.
   그래서 전달할수 있는 정보에는 한계가 있죠. 8byte로 충분하면 그냥 이렇게 써도 되구요

   데이타가 많으면 주로 WM_COPYDATA 메세지를 이용해서 보냅니다.
   WM_COPYDATA 로 검색하면 엄청 많이 나올것입니다.

   메세지 WM_USER    이하의 메세지는 wparam , lparam을 포인터로 볼때 그 포이터가 가리키는
   값을 다른 프로세서에서 접근할수 있도록 시스템(Windows)에서 다른 부분에 복사해서 보내줍니다.
   실제로는 메모리 공간이 다르기때문에 그냥 access하면 에러가 나죠

기타...
   클립보드를 이용하는 방법도 괜찮구요
   걍 파일에 기록하거나 db에 기록해놓고 메세지로 동기화해서 읽어오게 해도 되구요.
  
   무식한(?) 방법으로 해당 프로세서의 메모리공간으로 접근할수도 있습니다.
   

방법은 매우 많은데 만들고자 하는 프로그램에 맞게 적절한 방법을 선택해서 사용해야 겠지요

그럼..


깐돌 님이 쓰신 글 :
: A라는 프로그램의 메뉴버튼을 클릭하면 B프로그램이 실행되도록 shellexecuteEx 로 연결하였습니다.
:
: B프로그램에서 LinkedList로 된 어떤 정보를 보내서 A에서 그 정보를 활용해야되는데..
:
: 전혀 감이 안잡힙니다.
:
: 참고로 프로그램은 WindowAPI 로 구현된 것입니다.
:
: A, B프로그램에 어떤 함수 또는 방법으로 처리해야되는지 조언좀 부탁드립니다.

+ -

관련 글 리스트
55179 ShellexecuteEx 로 연결된 프로세스로부터 데이터를 받아오는 방법? 깐돌 1360 2008/11/13
55182     Re:ShellexecuteEx 로 연결된 프로세스로부터 데이터를 받아오는 방법? 장성호 2632 2008/11/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.