컴퓨터/C#

C#과 C++ 공유 메모리 사용

Begi 2022. 5. 16. 20:36
반응형

공유 메모리는 메모리 매핑 파일(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);

반응형