2013-05-27 2 views
4

C++로 작성된 네이티브 DLL에서 함수를 호출하는 WPF 응용 프로그램이 있습니다. 이 함수는 .DLL에서 때때로 WPF 응용 프로그램을 종료하는 프로세스 종료를 수행합니다.C에서 DLL에서 프로세스 종료를 감지하는 방법

예 : NativeMethod 내부

WPF App: 
..... 
[DllImport("native.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] 
private static extern void NativeMethod(); 
..... 
void CallFunction() 
{ 
    //Call the native function 
    NativeMethod(); 
} 
.... 

는 출구가 있고 나는 .DLL의 소스 코드를 변경할 수 없습니다. 누구나이 코드를 .NET 코드에서 DLL로 캡처하는 방법을 알고 계십니까? 사전에

감사합니다, 내 머리 꼭대기에

+1

한 가지를 제외하고는 아무 것도 할 수 없습니다. DLL을 버리십시오. –

+0

안녕하세요, Hans, 음에도 불구하고 완벽한 솔루션이 아니더라도 몇 가지 해결책이 있습니다 ... .dll에 대한 프록시가있는 간단한 콘솔 애플리케이션을 만들 수 있으므로 콘솔 프로세스 프로세스가 아니라 기본 프로세스가 죽을 것입니다. 몇 가지 솔루션입니다 .. – rsantos

답변

3

AppDomain.ProcessExitOk, AppDomain을 사용하는 문제는 .NET 어셈블리에서만 작동합니다. (따라서 P/Invoke를 통해 내 기본 DLL을로드하는 어셈블리를 만들어야했습니다. 일단 어셈블리를로드하면 다른 AppDomin을 호출하고 네이티브 .dll이 관리하는 .dll을 호출 함 AppDomain에서 AppDomain.ProcessExit 이벤트를 캡처하여 종료를 캡처 할 수 있음).

감사합니다. aiampogi 님의 아이디어입니다.)

1

는, 내가 생각할 수있는 유일한 것은 (AN 응용 프로그램 도메인에 대한) 프로세스/응용 프로그램 도메인에 DLL로드 그 메소드를 호출하고 ProcessExit 등록입니다 이벤트를 올바르게 처리 할 수 ​​있습니다.

나중에 이것을하려고 할 수도 있지만 appdomain에서 정적 메서드를 호출하거나 appdomain에서 직렬화되지 않은 클래스 메서드를 호출 할 수 있는지 확실하지 않습니다.

+0

안녕 aiampogi, 의견을 보내 주셔서 감사합니다, 내가 시작할 수있는 코드가 있습니까? 나는 당신의 생각을 계속 보일 것입니다. 감사합니다. – rsantos

+0

당신은 이미 그것을 한 것으로 나타났습니다. 축하해! 다행스럽게도 당신을 도울 수있었습니다. – aiapatag

관련 문제