C#과 C++ 공유 메모리 사용
공유 메모리는 메모리 매핑 파일(Memory-Mapped File)을 사용하여 데이터를 교환하는 것이다. 메모리 매핑 파일은 하드디스크가 아니라 램에 파일을 만들어 데이터를 고속으로 송수신할 수 있다.
C++에서 메모리 매핑 파일을 만들고 만들어진 메모리 매핑 파일을 C#에서 읽는 방법은 다음과 같다.
C++
C++에서 메모리 매핑 파일은 다음과 같이 사용한다.
다음과 같이 파일을 만든다. 파일 이름은 DataName이다.
byte *p;
HANDLE handle;
handle = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(Pair), L"DataName");
p = (byte*) MapViewOfFile(handle, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 1000);
파일에 데이터를 쓴다.
memcpy(p, data, 1000);
종료할 때는 다음과 같이 핸들을 해제한다.
if (handle != NULL) CloseHandle(handle);
C#
C#에서 메모리 매핑 파일을 읽는 방법은 다음과 같다. 파일 이름이 DataName으로 같아야 한다.
public static MemoryMappedFile mmf;
public static MemoryMappedViewStream mmfvs;
mmf = MemoryMappedFile.OpenExisting("DataName");
mmfvs = mmf.CreateViewStream();
mmfvs.Read(buf, 0, 1000);