2010-02-28 4 views
0

App이로드되지 않은 상태에서 P-Invoke를 호출하면 관련 함수의 오류가 발생합니다.시작시 P/Invoke 오류 방지

예를 들어 지금 시작시 LoadLibrary를 통해 다양한 DLL을로드하고 특정 함수를 내 보낸 지 테스트하려고합니다.

응용 프로그램이로드 절차를 완료하는 동안 그렇게하면 오류가 발생하지 않습니다 (결과는 0이며 GetLastError를 통해 검사 할 수 있습니다). 시작 시간에 수행하면 (예 : 양식의 Load 이벤트) 오류를 분출합니다 (예 : 누락 된 모듈 등).

이러한 오류를 무시하는 방법이 있습니까?

예외는 아니지만 시스템 메시지 상자 및 try ... catch는 여기서 작동하지 않습니다.

감사합니다.

답변

1

메시지 상자가 LoadLibrary()를 호출하는 것을 볼 수는 없습니다. SEM_NOOPENFILEERRORBOX와 함께 P/Invoking SetErrorMode()이 문제를 해결하는지 확인하십시오. Load 이벤트 대신 Shired를 사용하면 가치가 있습니다.

+0

감사합니다. 문제가 해결되었습니다. :) – feal87

+0

노트처럼 SetErrorMode의 모든 값을 사용했습니다. SEM_NOOPENFILEERRORBOX만으로는 충분하지 않습니다. : P (내가 DLL 스캔을 완료했을 때 다시 활성화) – feal87

0

다양한 DLL에 특정 진입 점이 있는지 테스트하고 싶다면 GetProcAddress() API를 사용하십시오. GetProcAddress()가 특정 entrypoint에 대해 0을 반환하면 해당 진입 점은 해당 DLL에 없습니다.

+0

코프 코프, 나는 이미 이것을 알고 있습니다. 문제는 또 다른 ... 나는 이미 이것을한다. 그러나 LoadLibrary가 실패하고 시작시 호출되면 messagebox가 나타납니다. : P – feal87

+0

오, 알았어요. 내 실수. 질문의 제목이 "P/Invoke errors"이므로 P/Invokes에서 실제 DLL로 오류가 발생했다고 가정했습니다. 위의 귀하의 의견을 바탕으로, 실제로보고 있던 LoadLibrary() 실패했습니다. – Ants

0

시도 할 코드가 없지만 별도의 스레드에서 예외가 발생하고 try 및 catch 블록에 의해 처리되지 않기 때문에 메시지 상자가 표시되는 느낌이 들었습니다. 응용 프로그램의 시작 부분에이 두 이벤트를 연결하고 여기에서 이벤트 핸들러가 예외를 포착하려고 시도 할 수 있습니까?

Application.ThreadException 
    AppDomain.CurrentDomain.UnhandledException