문제

Windows Mobile의 C ++ 프로젝트 (예 : .NET)에서 독립적으로 실행중인 두 개의 응용 프로그램간에 쉽게 통신 할 수있는 방법을 찾고 있습니다. 응용 프로그램 A는 서비스를 실행하는 반면 응용 프로그램 B는 사용자에게 일부 기능을 제공합니다. B는 A의 기능 중 일부를 호출해야합니다. 차라리 COM에서 아무것도 구현하지 않겠습니다.

실제로, 나는 어떤 종류의 직렬화 또는 이와 유사한 것을 원하지 않고 (즉, 소켓/파이프/파일 사용을 제외하고) A가 B의 일부인 것처럼 모든 매개 변수와 포인터를 A로 전달하도록합니다. 또한 Apps C, D 및 E는 실행 중 하나의 인스턴스만으로도 동일하게 수행 할 수 있어야합니다.

B는 때때로 크기가 이전에 알려지지 않은 A로 배열 (또는 std :: 벡터 또는 std :: map)을 반환해야한다고 덧붙여 야합니다.

Windows Mobile 및 다른 플랫폼에서 가능합니까?

도움이 되었습니까?

해결책

프로세스 전체에서 데이터를 공유 할 수는 없습니다. 나는 com을 추천하지 않는다. 파이프는 Windows CE에 존재하지 않습니다. 가장 좋은 경로는 a입니다 메모리 매핑 파일 (데스크탑과 같은) 또는 a 포인트 간 메시지 대기열 (데스크탑과 같은 것은 없습니다). 더 나은 것은 사용 시나리오에 따라 다릅니다.

하다 ~ 아니다 안전하지 않은 해킹 안전하지 않으며 CE 6.0 이상에서 지원되지 않으므로 Winmo 7 이후에 끊어지게됩니다.

Windows 메시지와 WM_CopyData를 사용하지 않는 것이 좋습니다. 느리고, kludgy이며, 오류가 발생하기 쉬운다.

사람들은 평판 포인트를 얻기 위해 플랫폼을 사용하지 않았을 때 단지 질문에 답하지 마십시오. 당신이 플랫폼을 모른다면, 다른 사람이 거위 추격으로 그를 보내지 않고 그 사람을 도와 주도록하십시오.

다른 팁

서비스 (a)와 의사 소통하기 위해서만 응용 프로그램 만 필요하기 때문에 사용하지 않는 이유는 무엇입니까? CreateFile 그리고 DeviceIoControl 정의 된 IOCTL 세트로?

다음은 시작하기에 좋은 소스입니다. http://msdn.microsoft.com/en-us/library/aa446520.aspx귀하는 귀하의 요구에 가장 적합한 옵션을 결정합니다.

당신은 사용 가능한 모든 기지를 거의 다루었습니다. com, 파이프, 소켓, 메모리 매핑 파일. Windows의 모든 프로세스에는 메모리 공간이 완전히 분리되어 있으므로 IPC 메커니즘 중 하나를 사용하지 않고는 공유 할 수 없습니다.

Windows Mobile에서는 모든 프로세스가 동일한 주소 공간에 매핑되어 있음을 기억합니다. 따라서 알려진 이름과 클래스 이름을 가진 두 프로세스에서 메시지 창을 만들고 각 프로세스에서 FindWindow를 사용하여 다른 프로세스를 찾으십시오.

그런 다음 WM_APP 정의 메시지 ID와 WPARAM 또는 LPARAM에서 전송할 데이터에 대한 포인터를 사용한 SendMessage.

내가 틀렸고 모바일이 프로세스 메모리를 파티션하는 경우, 데스크탑에서 메모리 매핑을 사용하는 것과 실제로 빠른 WM_COPYDATA를 사용하여 앱간에 데이터를 보냅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top