공유 메모리 때문에 MS Visual C 6.0 DLL이 충돌하면 VB 6 EXE가 충돌합니다. 메인 프로그램 EXE는 VB 6로 작성되었습니다. 다양한 파일 유형에 대한 플러그인 (DLL)을 호출합니다. 이들은 MS Visual C 6.0으로 작성되었습니다. "C"플러그인 (DLL)에 문제가 발생하면 충돌이 발생하고 EXE 프로그램도 같은 주소 공간을 공유하므로 충돌이 발생합니다. 그래서 나는 MS Visual C 6.0 DLL이 VB 6 EXE가 충돌하는 것을 막는 방법을 찾고 있는데, 이는 DLL이 충돌 할 때 발생합니다.MS Visual C 6.0 DLL이 충돌 할 때 공유 메모리로 인해 VB 6 EXE가 충돌합니다.
답변
DLL과 EXE는 아무 관련이 없습니다. 충돌하는 스레드입니다. 예외를 catch하지 않으면 Windows에서 기본 예외 처리기를 호출합니다. 프로세스를 종료하고 선택적으로 Microsoft에 문제를 알립니다.
VB6에서는 AccessViolation 같은 예외를 catch하고 처리 할 수 없습니다. 어쨌든 문제가되는 것은 아닙니다. 주된 실행 스레드는 심장 발작을 앓 았고 의미있는 방법으로 계속할 수 없습니다. 비록 당신이 그것을 붙잡을 수 있더라도, 프로그램은 부분적으로 돌연변이 된 그것의 세계적인 상태로 매우 가난한 상태에 있습니다. 계속하려고하면 더 많은 충돌이 발생합니다. 또는 더 나쁜 것은 잘못된 결과를 생성하고 중요한 데이터를 파괴합니다.
하나의 옵션은 별도의 프로세스에서 DLL을 실행하는 것입니다. 충돌이 귀하의 프로세스가 아니라 해당 프로세스를 종료합니다. 이 권리를 얻으려면 이 매우이 어렵습니다. 충돌을 감지하기가 어렵습니다. 그리고 프로세스 상호 운용성은 까다 롭습니다.
프로세스 interop는 다음과 같습니다. 하찮은. ActiveX EXE를 만듭니다. 그렇지 않은 경우 좋은 대답 – MarkJ
하지 않는 방법에 대한 좋은 예입니다. AV가 exe를 크래시하지 않고 RPC_E_SERVER_FAULT 오류 코드와 함께 catch되어 전달됩니다. 무엇이 잘못되었는지와 매우 위험한 실행 상태에있는 서버를 전혀 나타내지 않습니다. Vista의 IGlobalOptions에서 일부 해소되었습니다. –
DLL은 실행 파일과 동일한 프로세스 공간에서 실행됩니다. OS는 동일한 "프로그램"의 일부입니다. – Joe
C 함수를 어떻게 내보내나요? 더 자세히 설명 할 수있는 코드를 포함하는 데 도움이됩니다 .... 우리는 맹목적으로보고 있으며, 무엇이/어디서/왜/어떻게 보이지는 않습니다 ... – t0mm13b