C++ SharedMemory(Memory mapped) DLL을 C++ & C# 에서 사용할 때
조회수 1724회
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 에 콜백함수를 정의하여 사용하면 됩니다.
댓글 입력