C++ SharedMemory(Memory mapped) DLL을 C++ & C# 에서 사용할 때

조회수 1719회

X 프로젝트에서 DLL 을 만듭니다 (C++); X프로젝트에는 MemoryMapped 을 사용하여 데이터를 읽고 쓰는 함수들이 정의 되어 있습니다.

Y 프로젝트에서 X라는 DLL 을 사용합니다 주로 데이터를 입력합니다 (C++);

Z 프로젝트에서 X라는 DLL 을 사용합니다 주로 데이터를 읽습니다.(C#) 마샬 사용

윈도우에서 Y와 Z 프로그램이 같이 돌아가고 있을때, Y프로그램에서 값이 발생되어 메모리에 입력을 하면 Z프로그램이 값이 업데이트 되었는지 확인 할 수 있는 방법이 있나요?

따로 Loop 를 사용하여 항상 체크하고있는 방법이 아닌 DLL 에 CallBack 함수를 사용하여 구현 할 수 있다고 하는데 잘 이해가 되지 않습니다.

많은 의견 부탁드립니다 (__)

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • dll의 특성을 이용하는 방법입니다.

    dll의 경우 물리메모리에는 1번만 커밋됩니다.

    즉 각각의 프로세스에서 dll을 메모리에 올려도 물리메모리에는 1번만 올라가고 공유된다는 의미입니다. 물론 가상의 프로세스 메모리에 각각 맵핑이 됩니다.

    프로세스가 할당받는 메모리를 보면 공유영역이라는 곳이 있습니다. 그곳에 dll들이 위치하게 되고 프로세스들이 공유할 수 있게 됩니다.

    변수 같은 경우에는 c++에서 #pragma data_seg("섹션명") 형태로 정의했을텐데 pe 파일내 해당 섹션에 공유할 데이터를 저장하는 것입니다.

    dll 에 콜백함수를 정의하여 사용하면 됩니다.

    • 혹시 간단한 예제 볼 수 있는곳이 있나요... 구현하고 있는데 잘 안되네용 ㅠㅠ 알 수 없는 사용자 2017.9.24 15:19

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)