DLL을 Application(EXE)이나 다른 DLL과 연동하여 사용할 때~


DLL 내부에서 생성한 데이터(메모리)를 외부 프로세스에서 공유해야 될 필요가 생길 수도 있다.


DLL과 데이터를 공유하기 위해서는 2가지 방법이 있다.


1. data_seg pragma를 사용하여 공유할 섹션 만들기
2. 메모리 맵 파일 (memory mapped files)을 사용하기


1번째 방법을 사용해 봤는데, 간단해서 사용하기 쉽다.


1. 우선은 공유할 데이터(변수)를 Global 변수로 선언하고 #pragma data_seg를 다음과 같이 추가하기
#pragma data_seg("SHAREDATA")
int g_nCount = 0;
char g_szText[12] = "hello world";
#pragma data_seg()


2-1. 그런 다음에, DLL 프로젝트 내부에서 ***.def 파일에 아래의 내용을 추가한다.


SECTIONS
    SHAREDATA  READ WRITE SHARED


2-2. ***.def에 위의 내용을 추가하는 대신에 처음 입력한 소스 밑에 아래의 소스를 써도 된다.


#pragma comment( linker, "/SECTION:.SHAREDATA, RWS" ) // R:Read, W:Write, S:Shared



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


외부에서 변수를 접근하는 것은 여러 방법이 있겠지만, 하나를 예로 들면


아래와 같이 변수의 포인터를 리턴하는 함수를 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


출처 : http://www.dukgun.com

2005/12/27 14:12 2005/12/27 14:12
덕근닷컴 이 작성.

이 글의 관련글
    이글의 태그와 관련된 글이 없습니다.

Trackback URL : http://dukgun.com/trackback/173


당신의 의견을 작성해 주세요.

  1. Comment RSS : http://dukgun.com/rss/comment/173
  2. hd5535 2010/02/08 01:18  편집/삭제  댓글 작성  댓글 주소

    깔끔하게 정리가 잘 되어있네요 :)
    좋은 정보 잘 얻어가요 >_<

« Prev : 1 : ... 197 : 198 : 199 : 200 : 201 : 202 : 203 : 204 : 205 : ... 355 : Next »