none
서비스 프로그램과 일반 프로그램과의 메모리 공유 RRS feed

  • 질문

  • 서비스 프로그램과 일반 프로그램과의 메모리 공유를 하려고 합니다.
    여러가지 방법이 있겠지만 DLL을 이용하여 메모리를 공유하려고
    다음과 같이 DLL 파일을 만들었습니다.

    #pragma data_seg(".MyShare")
    char  g_player_running = 0;                          // 0 - No Running, 1 - Running, 2 - User Terminated
    #pragma data_seg()
    #pragma comment( linker, "/SECTION:.MyShare,RWS")
    
    extern "C" _declspec(dllexport) char GetPlayerRunningStatus()
    {
        return g_player_running;
    }
    
    
    extern "C" _declspec(dllexport) void SetPlayerRunningStatus(char AStatus)
    {
        g_player_running = AStatus;
    }
    
    
    extern "C" _declspec(dllexport) char* GetPlayerRunningStatusPointer()
    {
        return &g_player_running;
    }

    서비스 프로그램과 일반 프로그램에서 각각 로드해서 데이터를 주고 받으려고 하는데
    이상하게 안되네요..... 
    일반 프로그램 두개 실행하면 잘 되는데, 서비스와 일반 프로그램간에는 안되네요.
    그래서 GetPlayerRunningStatusPointer() 함수로 해당 변수의 포인터를 가져왔는데
    둘다 같은 값을 가져옵니다.... 그래서 SetPlayerRunningStatus를 이용하지 않고
    직접 메모리에 접근해서 값을 썼는데도 안되네요~ 
    이유가 뭔가요?? 원래 서비스 프로그램에서는 안되나요???



    • 편집됨 쭈쭈 2021년 1월 28일 목요일 오전 6:46
    2021년 1월 28일 목요일 오전 6:39

모든 응답