TN012: MFC를 사용 하 여 Windows 3.1 견고성 기능

메모nbsp;??Windows 3.1이 기술 노트 작성 되었습니다. Windows NT는 대부분의 이러한 기능을 구현합니다. Windows 3.1 (Win32s Dll)와 함께 아래에서 응용 프로그램을 실행할 때 이러한 기술을 디버깅에 도움이 될 수 있습니다. 또한 windows 95 구현 하 고 Windows 3.1 동안 장소에 넣어 견고성 기능을 확장 합니다. 응용 프로그램을 보장 하는 가장 좋은 방법은 데이터베이스가 실행 되는 Windows 95의 디버그 버전을 실행(&N)。

윈도우 3.1 윈도우 3.0 강력한 응용 프로그램 개발의 영역에서 주요 개선 이다. Windows 3.1에는 다양을 한 Windows 응용 프로그램의 안정성을 강화 하는 새로운 기능이 포함 되어 있습니다. 이 기술 노트에서는 MFC 라이브러리 내에서 이러한 기능을 사용。

이러한 기능에는 디버그 커널, STRICT 유형 검사, 진단 및 메모리 관리 및 해당 WINDOWSX 포함 됩니다.H 향상。

윈도 3.1 디버그 커널

메모nbsp;??이 섹션은 Microsoft Visual c + + 버전 1.5에만 적용 됩니다(&N).

MFC 응용 프로그램 디버그 시스템 실행 파일을 테스트 하는 것은 강력 하 고 신뢰할 수 있는 응용 프로그램 인지 확인 할 수 있는 가장 좋은 것은. 시스템 실행 파일의 디버깅 버전은 모든 종류의 유용한 오류 디버그 출력 메시지와 함께 발생 하는 문제에 알려주는 당신에 대 한 검사 수행。

두 기계는 디버그 시스템을 사용 하는 가장 좋은 방법은: 테스트 하 고 디버깅 하는 컴퓨터는 설치 디버그 시스템 및 개발 시스템. 하나의 시스템을 테스트 컴퓨터 디버그 커널 항상 실행 해야 합니다. 다른 기계를 개발 컴퓨터는 비 디버그 커널와 함께 실행 해야 합니다. Null 모뎀 회선을 통해 기본 컴퓨터에 디버그 커널 로부터 출력을 보낼 수 있습니다. 단일 컴퓨터의 경우 (약간의 성능 저하는) 디버그 커널 실행 해야 한다. 디버그 커널에서 출력은 DBWIN, Microsoft Visual c + + 버전 1.5에 포함 된 도구를 라우팅할 수 있습니다. 또한, Visual c + + 출력 창 디버거에서 실행할 때 출력을 받을 것 이다。

단일 컴퓨터에서 디버깅을 위한 유용한 트릭 별도 디렉터리에 시스템 및 디버그 바이너리와 심볼의 복사본을 배치 하 고 Windows 시스템 디렉터리에 적절 한 파일을 복사 하는 배치 파일입니다. 이 방법으로 Windows를 종료 하 고 앞뒤로 사이 빠르게 전환할 디버그 및 비 디버그 합니다. Visual c + + 버전 1.5 설치 프로그램을 설정, 다음 디버그 및 비 디버그 버전의 Windows d2n로를 전환할 수 있습니다.박쥐와 n2d입니다.박쥐 배치 파일。

디버거 또는 디버그 터미널 실행 되지 않습니다 오류 및 디버그 시스템에 의해 생성 되는 경고 메시지를 볼 수 있도록 DBWIN 응용 프로그램을 실행 해야 합니다. 이 응용 프로그램은 Visual c + + 버전 1.5에 포함。

아래 제공 된 Windows 응용 프로그램에 자주 나타나는 몇 가지 일반적인 프로그래밍 오류 있습니다. 이러한 문제 중 많은 임의의 시스템 UAEs Windows 3.0에서 다른 문제가 발생할 수 있습니다. 디버그 시스템 바이너리와 같은 문제를 추적 하는 데 도움이 됩니다.:

MFC 진단

Microsoft Foundation Classes 컴파일 되 고 라이브러리의 디버그 빌드에만 연결 된 견고성 기능 세트와 함께 제공 하는 이외에, (끝나는 그 라이브러리 변형 한 했다 '). 작성 하 고 디자인할 클래스에서 크게 향상 됩니다 런타임 및 컴파일 타임 오류 트래핑 응용 프로그램의 응용 프로그램에서 이러한 기능을 사용. 이러한 기능은 아래 설명 하지만 모든 클래스 라이브러리 참조 설명서에서 설명 하는。

MFC에서 CObject 에서 파생 된 모든 클래스 구현 Dump 멤버 함수를 ASCII 형태로 개체의 상태를 볼 수 있습니다. 이 함수 디버거에서 호출 하거나 # ifdef _DEBUG /#endif 부분의 코드 내에 배치 될 수 있습니다. 도우미 함수 AfxDump 이 목적만을 위해 디버그 라이브러리에 포함 됩니다. 단일 매개 변수, CObject *와 함께 호출 됩니다. 인수를 인쇄 하려면 디버거에서이 함수를 호출할 수 있습니다. 구현 하는 클래스에 대 한 덤프 멤버를 제공 해야 합니다. AssertValid와 마찬가지로 먼저 명시적으로 호출 해야 기본 클래스 멤버 함수를 덤프 합니다. 덤프 의 출력은 표준 MFC CDumpContext, afxDump, 기본적으로는 디버거 출력 창 또는 귀하의 디버그 터미널로 라우팅됩니다. DBWIN 프로그램을 사용 하 여 afxDump출력을 볼 수도 있습니다. 소스 파일 MFC\SRC\DUMPINIT입니다.CPP afxDump 다른 대상에 라우팅하는 방법에 대 한 정보를 포함。

추적, 동작 하는 많은 매크로 처럼 printf, afxDump 위치 경로 출력. 추적 문을 사용 하 여 코드에서 까다로운 또는 뛰어난 장소를 표시 해야 합니다. 로 다른 견고성 기능 추적 만 의미 있는 디버그 라이브러리에와 소매 빌드에서 아무 효과가 합니다. MFC 라이브러리의 메시지의 흐름을 추적 하기 위한 추적 문에 내장 하는 숫자를 포함 합니다. 디버그 추적에 대 한 자세한 내용은 기술 노트 7 을 참조 하십시오。

ASSERT 문의 유효성에 대 한 런타임 검사입니다. 프로그램을 통해 자유롭게 ASSERTs를 사용 해야 합니다. 메모는 효과를 어떤 장소:

/ / Lpstr이 시점에서 NULL 이어야

런타임 assert와 함께 그를 교체 해야:

ASSERT(lpStr == NULL)

컴파일러는 의견을 이해할 수 없다 하지만 그것 어설션 매크로에 식을 평가할 수 있습니다. 소매 빌드에서 ASSERT 문을 아무런 영향이 없습니다. 정품 빌드에서 ASSERT 에서 정보를 필요로 하는 경우 다음 확인 매크로 사용。

MFC에는 광범위 한 진단 메모리 할당자를 포함 되어 있습니다. 진단 메모리 할당자를 사용 하 여 특정 프로그램 기능 중 무료 모든 메모리 리소스를 확인 합니다. 진단 할당자 추적 소스 파일 및 줄 번호는 할당의 CMemoryState::DumpAllObjectsSince API를 사용 하는 경우 남아 있는 모든 할당을 찾을 수 있도록。

기본적으로 MFC는 해제 되지 프로그램에서 (있을 경우) 귀하의 프로그램이 종료 되기 전에 모든 개체를 덤프 됩니다. 디버거에서 응용 프로그램을 실행 하 여이 출력을 볼 수 있습니다.

윈도 3.1 엄격한 형식 검사

STRICT 유형 검사는 WINDOWS와 함께 사용할 수 있는 옵션입니다.H 헤더 파일입니다. MFC는 기본적으로 이러한 고급 형식 및 MFC 응용 프로그램을 작성 하는 경우 사용 해야 합니다. MFC 이상 STRICT defintions 없이 응용 프로그램 구축을 지원합니다。

형식 안전 링크와 엄격한

C + +에서이 함수는 다른 형식 매개 변수 목록으로 이름이 같은 많은 기능을 허용 됩니다. 하기 위해서는 고유한 링크 기호, c + + 컴파일러는 "장식" 이름, 번호 및 형식 매개 변수를 호출 하는 규칙 등의 종류와 같은 함수에 대 한 정보를 암호화 하는 알고리즘을 사용 하 여 이러한 이름。

새로 생성 된 이름은이 함수에 대 한 외부 링크 상징으로 사용 됩니다. 이 형식 안전 연계로 알려져 있으며 c + +의 큰 장점입니다. 이 이름 데코레이션 extern "C" 블록 안에 함수에 적용 되지 않습니다와 그 이유는 WINDOWS의 모든 Api.같은 블록에 있는 H。

STRICT 유형 창에서 검사 합니다.H Windows에서 다른 모든 핸들을 나타내는 고유한 형식을 사용 하 여 Windows 프로그램에 대 한 형식 안전성을 향상 시킵니다. 예를 들어 고급 에서 실수로 HPEN HBITMAP 을 기대 하는 루틴에 전달 방지。

Extern "C" {} 블록 내의 모든 Windows Api 이기 위에서 설명한 방식 장식 하지는. STRICT (구체적으로 그것을 나타내는 명시적 캐스팅 없이 자유롭게 변환 될 수 없는 처리s 다른 포인터 형식 사용) 고유한 수 있도록 다양 한 Windows typedef의 종류 변경。

볼 수 있듯이, STRICT 유형 검사 한 파일을 다른에 사용 해야 하는 경우, c + + 컴파일러는 단일 함수에 대 한 다른 외부 링크 기호를 생성 합니다. 이 링크 타임 오류가 발생할 것입니다. 따라서, STRICT 유형 (그 끝에 C 모듈에 대해서만 검사를 사용 하는 것이 좋습니다.C). 또한, STRICT 이므로 컴파일 타임만 옵션 STRICT 의 이점을 완전히 깨달았다 일단 코드를 성공적으로 컴파일하려면。

STRICT 를 혼합 하는 경우 및 비-STRICT 코드를 알고 있어야 연계 불일치. 일반적으로, 모든 MFC 프로그래밍 및 모든 c + + 고급으로 수행 되어야 합니다. 레거시 C 코드 경우 허용 되는 다음 STRICT 를 사용 하지 않는。

윈도 3.1 WINDOWSX.H 헤더 파일

새로운 Windows 3.1과 Win32입니다 있는 WINDOWSX.3.를 사용 하 여 윈도우 프로그래머를 위한 C 코딩 스타일에 다양 한 확장을 지 원하는 H 헤더 파일 이러한 매크로 Api, 메시지 크래커 및 제어 Api WINDOWSX 파일에 정의 됩니다.H。

이 구문은 주로 C 프로그래머를 위해 설계 되었습니다. MFC는 WINDOWSX의 사용을 지원 합니다.H, 그래서 만약 당신이 기존 코드에 의존 하는 이러한 긴장, MFC에서 수정이 코드를 사용 합니다. 그러나 MFC의 모든 WINDOWSX의 기능에 대 한 비교 숙어는 것을 발견할 것 이다.H, 그리고 사용 하는 c + + 언어 더 많은 의미와 건축 안전 이러한 작업을 수행 하。

WINDOWSX를 사용 합니다.H # 반드시 AFXWIN를 포함 하는 전에 그것을 포함 합니다.H (또는 STDAFX입니다.H AppWizard 구조를 사용 하는 경우)。

유일한 경고는 두 WINDOWSX입니다.H Api MFC c + + Api와 충돌 합니다. 두 가지 Api SubclassWindow 및 CopyRgn 는 MFC 내에서 사용 하기 위해 사용할 수 없습니다. MFC API (및 클래스) 중 하나를 사용 하 여이 다시 코딩 하거나 Windows API를 직접 호출 해야 합니다. 다른 이름으로 자신의 매크로 코드 또한 수 있습니다.

기술 노트 번호로 |nbsp; 카테고리별 기술 노트(&N)

Index