티스토리 뷰

프로세서와 상관없이 커널 모드에서 공유 섹션을 이용해서 접근이 가능하다.

 

1. data_seg pragma를 사용하여 공유할 섹션 만들기


우선은 공유할 데이터(변수)를 Global 변수로 선언하고 #pragma data_seg를 다음과 같이 추가하기

#pragma data_seg("SHAREDATA")
int g_nCount = 0;
char g_szText[12] = "hello world";
#pragma data_seg()

 

 

DLL 프로젝트 내부에서 ***.def 파일에는 아래 내용을 적어서 익스포트한다.

익스포트한다는 것은 링커의 고유기능이다.

 

SECTIONS
    SHAREDATA  READ WRITE SHARED

 

또는 코딩에서는 아래와 같은 방법을 통해서 링커단계에서 익스포트를 권장할수 있다.

 

#pragma comment( linker, "/SECTION:.SHAREDATA, RWS" )

 // R:Read, W:Write, S:Shared



이젠 g_nCount와 g_szText데이터를 DLL 외부에서 사용할 수 있게 된다.

 

// Global로 선언된 변수(공유 데이터)를 리턴해줄 함수 만들기
__declspec(dllexport) int* GetCountPointer()  // 물론, 외부에서 호출할 때는 __declspec(dllimport)
{
    return &g_nCount;
}

 

__declspec(dllexport) char* GetTextPointer()  // 물론, 외부에서 호출할 때는 __declspec(dllimport)
{
    return g_szText;
}

 

물론, new로 생성한 변수들도 공유가 가능하다.
메모리 해제(delete)는 DLL 내부에서 해도 되고, DLL 외부에서 해도 된다.

 

 

참고자료
MSDN How do I share data in my DLL with an application or with other DLLs?
http://msdn2.microsoft.com/en-us/library/h90dkhs0.aspx

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함