2010-04-27 6 views
4

질문 : 다른 프로그램에서로드 할 수있는 DLL이 있습니다. 이제 dll은 다른 프로그램의 모든 데이터/기능에 액세스 할 수 있습니다.Windows IPC 방법이란 무엇입니까?

외부 프로그램이 해당 프로그램에 데이터/명령을 보내고 다른 프로그램을 조정하거나 데이터를 가져올 수있는 기술은 무엇을 사용할 수 있습니까?

DDE를 의미하는 과거에는 Windows 3.11/95 시대로 돌아갔다. 오늘 무엇을 사용할 수 있습니까? 어느 것이 가장 쉬운가요? 어느 것이 가장 빠릅니까?

답변

6

일반적인 사람은 다음과 같습니다

  • Named Pipes. 상당히 쉽게 구현할 수 있습니다.
  • Shared Memory. 좀 더 일하지만 조금 더 빨라질 수 있습니다 (최소한 내 테스트에서는).
  • Sockets. 이것은 매우 간단하고 휴대 성이 뛰어나지 만 고성능은 아닙니다. 그러나 갑자기 다른 컴퓨터에서 실행되는 프로세스와 통신 할 수 있기를 원한다면 좋을 것입니다.
+0

이상 게시 아직 충분한 담당자가 없습니다 http://msdn.microsoft.com/en-us/library/windows/desktop/aa365574%28v=vs.85%29.aspx 나는 믿습니다. 그 두 가지 가장 좋은 방법은 파이프와 SharedMemory 비록 지금까지 그들의 성능을이 구현과 함께, 특히 C#, 공유 메모리가 가장 빠르고 가장 쉬운 것 같아요하지만 그것은 파이프를 통해 네트워크를 통해 통신을 허용할지 모르겠지만 http://www.codeproject.com/Articles/138290/Programming-Memory-Mapped-Files-with-the-NET-Frame – Anonymous

+0

이 두 링크가 모든 사람에게 가장 적합한 방법 http : // ko를 선택할 수있게합니다. wikipedia.org/wiki/Inter-process_communication 및 여기에 몇 가지 장단점이 있습니다 - http://stackoverflow.com/questions/404604/comparing-unix-linux-ipc – Anonymous

4

COM은 요즘 Windows 중심 응용 프로그램을위한 사실상의 표준 IPC 메커니즘입니다.

언어 장벽을 넘어 액세스 할 수 있으며 이진 인터페이스 호환성 문제를 해결하고 투명 마샬링을 수행하며 다양한 스레딩 모델을 사용할 수 있습니다.

sharptooth은 사실을 잘 요약 한 here입니다.

0

당신은 Mailslots을 고려해 볼 수 있습니다, 간단하고 빠른 통신을 위해 .NET

0

에서 높은 수준의 possiblities에 대해 Remoting을 잊지 마십시오. 그들은 사용하기 쉽습니다. 파일처럼 대화 할 수 있습니다.

메일 슬롯은 여러 수신자에게 명령을 브로드 캐스트하거나 여러 생성자로부터 메시지를 수신 할 때 가장 적합하며 디자인에서 가끔 메시지가 손실 될 수 있습니다. 위에서 언급 한 명명 된 파이프는 단일 프로세스 - 단일 프로세스, 보장 된 전달 IPC에 더 적합합니다.

좋은 소식

  • 그들은 그들은 비동기 작업을 지원
  • implmement 매우 간단
  • 그들은 심지어 주어진 윈도우 프로세스 격리를 사용할 수 있습니다. 즉, 다른 사용자 세션 (예 : Windows 서비스)간에 통신 할 수 있습니다.
  • "\ * \ mailslot [path] name"에 메일 슬롯을 열어 전체 도메인에 메시지를 브로드 캐스팅 할 수 있습니다.당신이 그와 같은 이름을 가진 메일 슬롯에 기록 할 때, 도메인

  • 만 424 바이트가 될 수 있습니다 나쁜 소식의 모든 컴퓨터에 그 이름의 모든 메일 슬롯에 보내드립니다 네트워크를 통해 전송됩니다. 더 많은 데이터를 수시로 메시지를 잃고
  • 때때로
  • (특히 멀티 프로세서 시스템), 메시지 순서
  • 이 약간 전달 될 수 괜찮은지가 그들은 UDP를 기반으로
  • , 그래서에만 사용할 로컬로 전송할 수 있습니다 그냥 내가 사용할 수있는 모든 방법을 나열 MSDN이 링크를 말할 것이다 완전한 목록을 만들기 위해

많은 샘플을 사용할 수 있습니다,하지만 난 하나의 C에서 on CodeProject ++