WinCE에서 처리되지 않은 예외를 포착하는 방법은 무엇입니까?

mario_qiu

데스크톱 Windows에서는에서 SetUnhandledExceptionFilter기능을 사용할 수 windows.h있지만 WinCE에서는 작동하지 않습니다. WinCE에서 처리되지 않은 예외를 어떻게 잡을 수 있습니까?

참고 : .NET이 아닌 C ++를 사용하고 있습니다.

줄리앙 러핀

지금까지 찾은 유일한 방법은 응용 프로그램의 모든 단일 스레드 실행을 다음과 같이 래핑하는 것입니다.

__try
{
    // Call the thread start function here
}
__except(MyExceptionFilter(GetExceptionInformation())
{
    // Handle the exception here
}

이것은 많은 작업처럼 들리지만 다음과 같이 스레드를 래핑하는 함수를 작성하면 비교적 쉽습니다.

typedef struct {
    void* startFct;
    void* args;
} ThreadHookArgs;

// "params" contains an heap-allocated instance of ThreadHookArgs
// with the wrapped thread start function and its arguments.
DWORD WINAPI wrapThread(LPVOID params) {

    ThreadHookArgs threadParams;
    memcpy(&args, params, sizeof(ThreadHookArgs));

    // Delete the parameters, now we have a copy of them
    delete params;

    __try {
        // Execute the thread start function
        return ((LPTHREAD_START_ROUTINE) threadParams.startFct) (threadParams.args);
    }
    __except(MyExceptionFilter(GetExceptionInformation())
    {
        // Handle the exception here
        return EXIT_FAILURE;
    }

}

그런 다음 스레드 시작 함수 대신 후크를 호출하는 자체 스레드 생성 함수를 작성합니다.

// Drop-in replacement for CreateThread(), executes the given
// start function in a SEH exception handler
HANDLE MyCreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,
                       DWORD dwStackSize,
                       LPTHREAD_START_ROUTINE lpStartAddress,
                       LPVOID lpParameter,
                       DWORD dwCreationFlags,
                       LPDWORD lpThreadId)
{
    HANDLE hThread;
    DWORD dwThreadId;

    LPTHREAD_START_ROUTINE startFct = lpStartAddress;
    LPVOID startParam = lpParameter;

    // Allocate the hook function arguments on the heap.
    // The function will delete them when it runs.
    ThreadHookArgs* hookArgs = new ThreadHookArgs;
    hookArgs->fct = lpStartAddress;
    hookArgs->args = lpParameter;

    // Set the start function of the created thread to
    // our exception handler hook function
    startFct = (LPTHREAD_START_ROUTINE) &wrapThread;
    startParam = hookArgs;

    // Start the hook function, which will in turn execute
    // the desired thread start function
    hThread = CreateThread( lpThreadAttributes,
                            dwStackSize,
                            startFct,
                            startParam,
                            dwCreationFlags,
                            &dwThreadId );

    return hThread;
}

Windows CE 6 이상을 사용하는 경우 해당 버전에는 벡터 예외 처리 기능이 있으므로 훨씬 더 쉽게 처리 할 수 ​​있습니다.

http://msdn.microsoft.com/en-us/library/ee488606%28v=winembedded.60%29.aspx

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

PyCharm에서 처리되지 않은 예외를 감지하는 방법은 무엇입니까?

분류에서Dev

센트리에 처리되지 않은 예외를 기록하는 방법은 무엇입니까?

분류에서Dev

전체 함수를 처리하지 않고 생성자에서 예외를 포착하는 방법은 무엇입니까?

분류에서Dev

PowerShell에서 예외를 포착하는 방법은 무엇입니까?

분류에서Dev

Room 지속성 라이브러리에서 처리되지 않은 예외를 포착하는 방법

분류에서Dev

포착되지 않은 예외를 확인하는 방법은 무엇입니까?

분류에서Dev

'System.ArgumentException'유형의 처리되지 않은 예외를 처리하는 방법은 무엇입니까?

분류에서Dev

vb.net 클래스 라이브러리 프로젝트에서 처리되지 않은 예외를 기록하는 방법은 무엇입니까?

분류에서Dev

pyspark에서 예외를 처리하는 방법은 무엇입니까?

분류에서Dev

C #에서 특정 예외를 처리하는 방법은 무엇입니까?

분류에서Dev

linqXml에서 처리 예외를 수정하는 방법은 무엇입니까?

분류에서Dev

WCF에서 모든 예외를 포착하지만 사용자 지정 데이터를 포함하는 방법은 무엇입니까?

분류에서Dev

처리되지 않은 MFC 예외를 생성하는 방법은 무엇입니까?

분류에서Dev

페이지 외부에서 예외를 처리하는 방법은 무엇입니까?

분류에서Dev

포착되지 않은 예외를 수정하는 방법 : 헤더 서명

분류에서Dev

Apache Thrift를 사용하여 단일 catch 문에서 모든 사용자 지정 예외를 포착하는 방법은 무엇입니까?

분류에서Dev

비행 중에 몇 가지 예외가있는 경우 어떻게되며이를 포착하는 방법은 무엇입니까?

분류에서Dev

XMLHTTP 요청에서 확인되지 않은 서버 주소를 처리하는 방법은 무엇입니까?

분류에서Dev

iOS Objective-C에서 C ++ 예외 코드를 포착하는 방법은 무엇입니까?

분류에서Dev

Junit 테스트 케이스에서 감싸 진 예외를 포착하는 방법은 무엇입니까?

분류에서Dev

JsonConverter 속성에서 발생한 예외를 포착하는 방법은 무엇입니까?

분류에서Dev

Mongodb에서 '정의되지 않은'필드를 처리하는 방법은 무엇입니까?

분류에서Dev

Blazor가 예외를 포착하지 못하도록하는 방법은 무엇입니까?

분류에서Dev

Java에서 검사되지 않은 잠재적 예외를 찾는 방법은 무엇입니까?

분류에서Dev

Rails 5에서 예외 처리 메시지를 단축하는 방법은 무엇입니까?

분류에서Dev

포착되지 않은 예외 처리기를 사용하여 예외에서 새 스레드 시작

분류에서Dev

Delphi 예외 처리기에 예외 처리 코드를 넣는 방법은 무엇입니까?

분류에서Dev

WinCe 5.0에서 투명 이미지를 사용하는 방법은 무엇입니까?

분류에서Dev

asyncio의 신호 처리기에서 사용자 지정 예외를 잡는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    PyCharm에서 처리되지 않은 예외를 감지하는 방법은 무엇입니까?

  2. 2

    센트리에 처리되지 않은 예외를 기록하는 방법은 무엇입니까?

  3. 3

    전체 함수를 처리하지 않고 생성자에서 예외를 포착하는 방법은 무엇입니까?

  4. 4

    PowerShell에서 예외를 포착하는 방법은 무엇입니까?

  5. 5

    Room 지속성 라이브러리에서 처리되지 않은 예외를 포착하는 방법

  6. 6

    포착되지 않은 예외를 확인하는 방법은 무엇입니까?

  7. 7

    'System.ArgumentException'유형의 처리되지 않은 예외를 처리하는 방법은 무엇입니까?

  8. 8

    vb.net 클래스 라이브러리 프로젝트에서 처리되지 않은 예외를 기록하는 방법은 무엇입니까?

  9. 9

    pyspark에서 예외를 처리하는 방법은 무엇입니까?

  10. 10

    C #에서 특정 예외를 처리하는 방법은 무엇입니까?

  11. 11

    linqXml에서 처리 예외를 수정하는 방법은 무엇입니까?

  12. 12

    WCF에서 모든 예외를 포착하지만 사용자 지정 데이터를 포함하는 방법은 무엇입니까?

  13. 13

    처리되지 않은 MFC 예외를 생성하는 방법은 무엇입니까?

  14. 14

    페이지 외부에서 예외를 처리하는 방법은 무엇입니까?

  15. 15

    포착되지 않은 예외를 수정하는 방법 : 헤더 서명

  16. 16

    Apache Thrift를 사용하여 단일 catch 문에서 모든 사용자 지정 예외를 포착하는 방법은 무엇입니까?

  17. 17

    비행 중에 몇 가지 예외가있는 경우 어떻게되며이를 포착하는 방법은 무엇입니까?

  18. 18

    XMLHTTP 요청에서 확인되지 않은 서버 주소를 처리하는 방법은 무엇입니까?

  19. 19

    iOS Objective-C에서 C ++ 예외 코드를 포착하는 방법은 무엇입니까?

  20. 20

    Junit 테스트 케이스에서 감싸 진 예외를 포착하는 방법은 무엇입니까?

  21. 21

    JsonConverter 속성에서 발생한 예외를 포착하는 방법은 무엇입니까?

  22. 22

    Mongodb에서 '정의되지 않은'필드를 처리하는 방법은 무엇입니까?

  23. 23

    Blazor가 예외를 포착하지 못하도록하는 방법은 무엇입니까?

  24. 24

    Java에서 검사되지 않은 잠재적 예외를 찾는 방법은 무엇입니까?

  25. 25

    Rails 5에서 예외 처리 메시지를 단축하는 방법은 무엇입니까?

  26. 26

    포착되지 않은 예외 처리기를 사용하여 예외에서 새 스레드 시작

  27. 27

    Delphi 예외 처리기에 예외 처리 코드를 넣는 방법은 무엇입니까?

  28. 28

    WinCe 5.0에서 투명 이미지를 사용하는 방법은 무엇입니까?

  29. 29

    asyncio의 신호 처리기에서 사용자 지정 예외를 잡는 방법은 무엇입니까?

뜨겁다태그

보관