2013-03-17 2 views
0

두 Windows 독립 실행 형 GUI 응용 프로그램을 고려하십시오. 첫 번째 GUI에서 명령 단추를 누를 때마다 다른 GUI가 단추의 상태를 캡처하고 텍스트 상자에 ON 또는 OFF를 표시해야합니다. 공유 메모리를 사용하여이를 어떻게 수행 할 수 있습니까?Windows에서 공유 메모리를 사용하는 방법

PS : 나는 VC++에서 2008 년

+0

http://stackoverflow.com/questions/1200998/sharing-memory-between-two-processes-c-windows – mox

+0

이 질문은 "내 잔디를 전기 톱으로 어떻게 깎을 수 있습니까?"라고 묻는 것과 같습니다. 적절한 도구를 사용하여 작업을 완료하십시오. –

답변

1

이 봐 사용하고 있습니다 : 공정 1에서 http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551%28v=vs.85%29.aspx

:

CreateFileMapping() : 그것은 마지막 매개 변수에서 제공하는 이름으로, 공유 메모리 블록을 생성합니다 , 아직 존재하지 않으면 핸들을 반환합니다 (포인터라고 부를 수도 있음).

MapViewOfFile() : 프로세스 주소 공간에이 공유 블록을 매핑 (포함)하고 핸들을 반환합니다. 다시 포인터를 말할 수 있습니다.

MapViewOfFile()에 의해 반환 된이 포인터로 만 해당 공유 블록에 액세스 할 수 있습니다. 공정 2에서

:

OpenFileMapping()

: 공유 메모리 블록이 성공적으로하여 CreateFileMapping()에 의해 생성 된 경우, 같은 이름 (공유 메모리 블록을 만드는 데 사용되는 이름)로 사용할 수 있습니다.

UnmapViewOfFile() : 해당 프로세스 주소 공간에서 공유 메모리 블록을 제거 할 수 있습니다. 공유 메모리를 사용하여 작업을 마쳤 으면 (예 : 액세스, 수정 등)이 함수를 호출하십시오.

Closehandle() 마지막으로 프로세스에서 공유 메모리 블록을 분리하려면 OpenFileMapping() 또는 CreateFileMapping()에서 반환 한 handle 인수를 사용합니다.

+0

당신이 제공 한 링크로 성공적으로했습니다. 감사합니다. 나는 그것에 의심이있다. BUF_SIZE의 값을 어떻게 결정합니까? (#define BUF_SIZE 256, 당신이 제공 한 링크에 256이 주어진다.) – Inquisitive

+0

#define BUF_SIZE 256은 단지 예일 뿐이다. WinApi32에 정의 된 MAX_PATH도 가질 수있다. – duDE

+0

또한 항상 실행해야한다. exe는 관리자입니다. 일반 사용자가 어떻게 사용할 수 있습니까? – Inquisitive

관련 문제