Microsoft MVP성태의 닷넷 이야기
시스템 종료시 block 함수 xp 지원가능한 방법 질문 [링크 복사], [링크+제목 복사],
조회: 11105
글쓴 사람
jaemin
홈페이지
첨부 파일
 

안녕하세요. 개발하다가 막히는 부분이 있어서 도움을 받고자.. 질문을 올립니다..

시스템 종료시 저희 프로그램에서 WM_QUERYENDSESSION 를 통해 로그 내용을 서버로 보내고 종료하도록 하고있습니다. 10초정도 시간이 걸려서 ShutdownBlockReasonCreate(), ShutdownBlockReasonDestroy() 함수를 사용하여 block 을 걸었는데요.. 이게 비스타 이후 부터 지원하는 함수더라구요..

7이상에서는 정상적으로 동작하고 있는데 xp 환경에서는

"프로시저 시작 지점 ShutdownBlockReasonDestroy을(를) DLL USER32.dll에서 찾을 수 없습니다."

라는 메시지가 나오네요..

프로시저라서 그런지

OutputDebugStringW를 타기 전에 프로그램이 죽어버리고 if 문으로 비스타 이상 분기 처리를 해도 프로그램이 죽어버립니다.

ShutdownBlockReasonCreate() 함수 외에 다른 함수로 대체할 수 있는 함수가 있는지..

아니면 해당 함수로 해결할 방법이 있는지 여쭤봅니다..

아래는 해당 예제 코드 입니다.

LRESULT CMFCApplication6Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)
  {
  case WM_QUERYENDSESSION:
    if (lParam & ENDSESSION_CRITICAL)
    {
      
    }
    else
    {
      if ((lParam & ENDSESSION_CLOSEAPP) || (lParam & ENDSESSION_LOGOFF))
      {
        OSVERSIONINFOEX osvi;
        ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
        osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
        if ( GetVersionEx((OSVERSIONINFO*)&osvi) == TRUE )
        {
          // 비스타 이상
          if (osvi.dwMajorVersion >= 6)
          {
            OutputDebugStringW(L"비스타 이상");
            ShutdownBlockReasonCreate(GetSafeHwnd(), L"test");
            ShutdownBlockReasonDestroy(GetSafeHwnd());
          }
          else
          {
            OutputDebugStringW(L"비스타 이전");
          }
        }
      }
    }
  }
  return CDialogEx::WindowProc(message, wParam, lParam);
}








[최초 등록일: ]
[최종 수정일: 4/20/2017]


비밀번호

댓글 작성자
 



2017-04-20 02시02분
그와 같이 platform을 타는 API는 'Implicit linking' 해서 사용하면 DLL 로딩 시에 함수 유무를 검사하기 때문에 문제가 됩니다. 이럴 때는 GetProcAddress를 이용한 'Explicit linking'을 해야 합니다.

아래의 글에 실린 예제 코드를 보면, QueryInterruptTimePrecise 함수가 윈도우 10부터 지원하는데 GetProcAddress를 이용해 어떻게 호출하는지 방법이 나옵니다.

윈도우 운영체제의 시간 함수 (3) - QueryInterruptTimePrecise, QueryInterruptTime 함수
; http://www.sysnet.pe.kr/2/0/11066
정성태
2017-04-20 04시43분
[jaemin] 감사합니다~! GetProcAddress를 사용하여 해결되었습니다~!!!
[guest]

1  2  3  4  5  6  7  8  [9]  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5730김재환10/7/20224947WPF에서 디스플레이 배율이 100%가 아닌 경우, Window의 포지션 정보가 부정확해지는 문제 [2]
5729김기헌10/2/20224574안녕하세요 선생님 뮤텍스 관련 질문 드립니다 [2]
5728김경환9/29/20224590그리드뷰관련마지막질문하나드리겠습니다선생님 [5]파일 다운로드1
5727김경환9/26/20224496c# 윈폼 tcp/ip 기반 데이터그리드뷰질문하나드리겟습니다 [3]
5726양승조 donator9/22/20225181C# dll 과 C++ 간 배열 전달. SafeArray [10]파일 다운로드1
5725김기헌9/21/20224053안녕하세요 선생님 윈폼 컨트롤 Dispose 관련 질문드립니다 [2]
5724감사합니...9/19/20224096스레드와 스레드 안전한 객체 사용관련 문의드립니다. [5]
5723드리렁9/13/20224030Pinned Object에 대해서 질문이 있습니다. [2]
5722김인태9/8/20224202대화상자에서 alt + tab 후킹 작업 [1]
5721우종9/7/20224362C++ DLL 과 C# 연동 문의 [2]
5720한예지 donator9/6/20224051학습 방법 질문 있습니다. [7]
5719김경한9/6/20224384안녕하세요 질문하나만드리겠습니다...! [10]
5718김민아9/2/20224447안녕하세요 생성자 호출 시 초기화 순서 질문드립니다 [2]
5716iili...8/26/20224610WinDbg 커널 디버깅에서의 thread freeze [2]
5715에릭8/19/20225025WMI 쿼리 결과값이 Windows Service와 Console 출력에서 상이한 이유가 있을까요? [9]파일 다운로드1
5714허니빠8/18/20225032.net6 hint path 를 프로젝트 단위로 지정할 수 있는 방법을 알고싶습니다 [8]
5713김기헌8/17/20224986안녕하세요 rgb 계산 오차가 있는데 원인을 모르겠습니다.. [3]
5712하태8/17/20224459안녕하세요 background service에서 user32dll 접근 질문 드리겠습니다.! [2]
5711하태8/16/20223970안녕하세요! 윈도우즈 해상도 관련 질문 드립니다. [1]
5710장성욱8/12/20224188c# 시리얼 통신 관련 질문 [3]
5709초보8/12/20223992WPF 커맨드 관련 질문 [2]
5708민성8/11/20224284안녕하세요 c#에서 화면의 배율 및 레이아웃을 변경할려면 어떻게 해야 할까요? [2]파일 다운로드1
5707민성8/10/20223921WPF 엣지 컨트롤에서 화면이 안보이는 현상 [2]파일 다운로드1
5706종규8/7/20226387WPF 에서 SVG 아이콘 사용 방법 문의 [2]
5705김기헌8/6/20225045안녕하세요 선생님 싱글톤 패턴 간단 질문 [2]
5704따봉이8/4/20224943EventHandler 관련 [1]
1  2  3  4  5  6  7  8  [9]  10  11  12  13  14  15  ...