제품 변경 내용: Visual C++ .NET 2003

업데이트: 2007년 11월

참고:

이 항목에서 설명하는 기능 중 일부는 Visual C++의 현재 버전에 없을 수도 있습니다. 자세한 내용은 Visual C++ 2005 및 이전 버전의 변경 내용을 참조하십시오.

Microsoft Visual C++ .NET 2003에서는 여러 가지 새로운 기능과 향상된 기능을 제공합니다.

  • Visual C++ 컴파일러, 언어 및 링커

  • Visual C++ 라이브러리

  • 개발 환경

  • Managed Extensions for C++용 Windows Forms 디자이너

  • 프로젝트 빌드 자동화 모델

Visual C++ 컴파일러, 언어 및 링커

다음은 Visual C++ .NET 2003에 새로 추가된 컴파일러, 링커, 기타 빌드 도구 및 Visual C++ 언어 기능입니다.

컴파일러

  • 현재 버전의 컴파일러를 사용하여 빌드한 Managed Extensions for C++ 응용 프로그램을 이전 버전의 런타임에서 실행하는 방법에 대한 정보를 제공합니다.

  • Managed Extensions for C++를 사용할 수 있도록 기존의 네이티브 응용 프로그램을 이식하는 방법을 보여 주는 연습 과정이 추가되었습니다. "연습: 기존 네이티브 C++ 응용 프로그램을 .NET Framework 구성 요소와 상호 작용하도록 이식"을 참조하십시오.

  • 이제 값 형식의 메서드에 대리자를 만들 수 있습니다.

  • Visual C++ .NET 2003에서는 C++ 표준을 더 철저하게 준수합니다.

  • /arch 컴파일러 옵션이 추가되었습니다.

  • /Gf는 사용되지 않으며 다음 버전의 Visual C++에서 제거될 예정입니다.

  • /G7 컴파일러 옵션이 추가되었습니다.

  • /GS 컴파일러 옵션이 향상되어 직접 버퍼 오버런으로부터 지역 변수를 보호할 수 있게 되었습니다.

  • /noBool 컴파일러 옵션은 제거되었습니다. 이제 Visual C++ 소스 코드 파일에서 bool을 식별자가 아닌 키워드로만 사용할 수 있습니다.

  • 이제 긴 long 형식을 __int64의 형식 정의로 사용할 수 있습니다. CRT에서는 아직 긴 long 형식을 사용할 수 없습니다.

  • /Zm 컴파일러 옵션은 이제 미리 컴파일된 헤더의 메모리 할당 제한을 지정합니다.

  • _InterlockedCompareExchange 내장 함수가 문서화되었습니다.

  • _InterlockedDecrement 내장 함수가 문서화되었습니다.

  • _InterlockedExchange 내장 함수가 문서화되었습니다.

  • _InterlockedExchangeAdd 내장 함수가 문서화되었습니다.

  • _InterlockedIncrement 내장 함수가 문서화되었습니다.

  • _ReadWriteBarrier 내장 함수가 추가되었습니다.

Visual C++ 특성

  • implements 특성이 문서화되었습니다.

링커

다음 링커 옵션이 추가되었습니다.

  • /ASSEMBLYDEBUG

  • /ASSEMBLYLINKRESOURCE

  • /DELAYSIGN

  • /KEYFILE

  • /KEYCONTAINER

  • /SAFESEH

전처리기

  • /MD와 함께 사용할 수 있도록 _STATIC_CPPLIB 기호가 문서화되었습니다.

  • _CPPLIB_VER 기호가 문서화되었습니다.

  • #import 지시문의 다음 특성이 문서화되었습니다.

    • auto_search

    • auto_rename

    • no_search_namespace

    • rename_search_namespace

    • tlbid

MASM

.SAFESEH 지시문과 /safeseh ml.exe 옵션이 추가되었습니다.

Visual C++ 라이브러리

이전 iostream 라이브러리

이 Visual C++ 릴리스에서는 이전의 iostream 라이브러리가 제거되었습니다. iostream 프로그래밍에는 표준 C++ 라이브러리를 사용하십시오.

C 런타임 라이브러리

  • C 런타임 라이브러리 설명서에 .NET Framework의 해당 요소에 대한 정보가 포함되어 있습니다.

  • _get_heap_handle이 추가되었습니다.

  • _CrtSetDbgFlag에 사용되는 _CRTDBG_CHECK_DEFAULT_DF 매크로가 이제 0으로 정의됩니다. 따라서 힙 검사가 기본적으로 수행되지 않습니다.

  • 이제 swprintf가 ISO C 표준과 호환됩니다(C++에만 해당).

  • 이제 vswprintf에서는 저장할 최대 문자 수를 지정할 수 있는 C++ 전용 형식을 사용합니다.

  • 이전에는 _mbsset 같은 일부 멀티바이트 함수의 경우 CRT가 선행 바이트 다음에 null 후행 바이트가 나오는 잘못된 멀티바이트 문자열을 항상 검색하지는 않았습니다. 그러나 이제는 선행 바이트 다음에 null 후행 바이트가 나오는 잘못된 멀티바이트 문자가 있는지 여부를 보다 강력하게 검사합니다.

  • _set_purecall_handler가 추가되었습니다.

  • 이전에는 프로세스에서 CRT 라이브러리를 정적으로 참조하는 DLL을 로드한 경우 부동 소수점의 정밀도가 53비트로 초기화되었습니다. Visual C++ .NET 2003에서는 이와 같은 경우 부동 소수점의 정밀도가 초기화되지 않습니다. 따라서 CRT를 통해 부동 소수점 정밀도를 초기화하는 일부 기존 응용 프로그램이 크게 변경되었습니다.

  • 이제 CRT가 모든 수학 함수에 float 및 double 형식을 사용합니다. 이러한 새 함수는 Visual C++에서만 호출할 수 있습니다.

표준 C++ 라이브러리

이전 릴리스에서는 wchar_t가 네이티브 형식으로 정의되지 않은 경우 스트림에 문자를 입력하고 출력하면 문자 또는 unsigned short 값이 저장되었습니다. 이제 unsigned short는 항상 문자로 처리됩니다.

Visual C++ .NET 2003에서는 <hash_map> 및 <hash_set> 헤더 파일의 멤버가 std 네임스페이스에 없습니다. 이러한 멤버는 stdext 네임스페이스로 이동했습니다.

C++ 표준에 대한 향상된 Visual C++ 컴파일러 지원을 사용할 수 있도록 표준 C++ 라이브러리가 업데이트되었습니다. 예를 들어, Visual C++에서 제공하는 표준 C++ 라이브러리 구현에서는 부분 템플릿 특수화를 사용합니다.

ATL

  • Visual Studio .NET 2003에서 MIDL 컴파일러는 /robust라는 기본 설정을 가집니다. 이 설정은 프로젝트가 Windows NT 4에서 실행될 경우 응답을 중지하도록 만듭니다.

MIDL 컴파일러 플래그를 /no_robust로 변경하려면

  1. 프로젝트를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성을 클릭합니다.

    프로젝트 속성 대화 상자가 나타납니다.

  2. 왼쪽 창에서 MIDL을 클릭한 다음 명령줄을 선택합니다.

  3. 추가 옵션 입력란에 /no_robust를 입력합니다.

  • ATL 문자열 변환 매크로인 USES_CONVERSIONUSES_CONVERSION_EX로 대체되었습니다. 이 매크로는 스택에 공간을 할당합니다. 스택에 사용할 수 있는 공간이 없으면 힙에 할당합니다. 힙에도 공간이 없으면 NULL을 반환합니다. USES_CONVERSION_EX에는 추가 매개 변수 threshold를 사용할 수 있습니다. 요청이 threshold의 크기보다 크면 이 매크로는 바로 힙으로 이동합니다.

  • _alloca_atl_safe_alloca로 대체되었습니다.

  • CSocketAddr 클래스가 추가되어 IPv6과 IPv4 주소를 모두 처리하기 위한 프로토콜 독립적인 메서드를 제공합니다.

  • 실행 파일을 출력하는 프로젝트를 빌드할 때 ATL에서는 런타임에 레지스터 스크립트 매개 변수 **%MODULE%**을 사용하여 만들어진 경로 이름 양 옆에 자동으로 따옴표를 추가합니다. 경로 이름을 작은따옴표로 묶지 않으려면 대신 새 %MODULE_RAW% 매개 변수를 사용합니다.

    DLL을 출력하는 프로젝트를 빌드할 때 %MODULE% 또는 **%MODULE_RAW%**가 사용되면 ATL은 경로 이름을 작은따옴표로 묶지 않습니다.

MFC

  • 이제 연결 지점을 삭제해도 연결 맵의 크기가 줄지 않습니다. 대신 삭제된 연결 지점이 NULL로 바뀝니다. 따라서 CConnectionPoint::GetConnections 또는 CConnectionPoint::GetNextConnection을 사용하는 경우 NULL을 검사해야 합니다.

  • 이제 CSimpleString::FreeExtra, CSimpleString::GetAt, CSimpleString::operator [], CSimpleString::ReleaseBuffer, CSimpleString::ReleaseBufferSetLength, CStrBuf::SetLength 등의 함수와 일부 CTime::CTime 생성자가 예외를 throw할 수 있습니다.

  • AfxIsValidAddressAfxIsValidString의 동작이 변경되었습니다. 디버깅되지 않은 빌드에서 이 두 함수는 NULL이 아닌 인수가 있는지만 테스트합니다.

  • 이제 CHeaderCtrl::GetOrderArray에 두 번째 기본 매개 변수가 없습니다. 따라서 두 번째 매개 변수에 -1을 사용할 수 없습니다.

  • CAsyncSocket에 IPv6 인식 멤버인 GetPeerNameEx, GetSockNameEx, ReceiveFromExSendToEx가 새로 추가되었습니다.

ATL과 MFC

  • 이제 CImage 클래스는 만들어진 개체의 수를 추적합니다. 개체 수가 0이 될 때마다 GdiplusShutdown 함수가 자동으로 호출되어 GDI+에서 사용한 리소스를 해제합니다. 따라서 DLL에서 CImage 개체를 만들 때에는 리소스가 해제되지 않습니다.

  • MFC CString 클래스가 템플릿 클래스 CStringT로 다시 작성되었습니다. 따라서 더 큰 MFC 정적 라이브러리나 DLL에 링크하지 않고도 ATL 프로젝트에서 CString을 사용할 수 있습니다.

    참고:

    이 릴리스에서는 기술 자료 문서 "PRB: Linking Errors When You Import CString-Derived Classes"(Q309801)에 설명된 문제를 해결했습니다. 기술 자료 문서는 MSDN Library CD-ROM이나 https://support.microsoft.com/default.aspx에 있습니다. Visual C++ .NET 2003에서는 이 문제가 해결되었으므로 CString에서 파생된 클래스를 MFC 확장 DLL에서 내보낼 때 링커 오류 메시지가 나타나 이 문서에 설명된 해결 방법을 적용한 경우에는 문제 해결을 위해 사용한 코드를 제거해야 합니다.

  • CString이 MFC DLL에서 사용되는지 여부를 표시하는 템플릿 매개 변수가 CStrBufTCSimpleStringT에 추가되었습니다. 따라서 전역 형식 정의 대신 atlsimplstr.h의 CStringT 또는 CSimpleStringT 클래스에 있는 형식 정의를 사용하십시오.

ATL 서버

  • ATL 서버로 만들어진 XML Web services에서는 SOAP 매개 변수를 읽어 들인 후 기본적으로 이러한 매개 변수가 올바른지 검사합니다. 유효성 검사 기능을 해제하려면 _ATL_SOAP_NO_PARAMETER_VALIDATIONS 매크로를 정의합니다.

  • 이제 SPROXY.EXE가 .discomap 파일이나 .wsdl 파일을 처리할 수 있습니다. .wsdl 파일을 입력 파일로 사용할 때에는 새로운 /wsdl 옵션을 지정합니다.

    sproxy /wsdl <input_location>
    

    여기서 <input_location>은 사용할 .wsdl 파일의 경로입니다.

    이제 SPROXY.EXE가 results.discomap 파일을 처리할 수 있습니다.

    sproxy results.discomap
    

    .discomap 파일에는 .wsdl 파일의 로컬 복사본에 대한 링크가 들어 있으며 스키마 파일의 로컬 복사본도 사용됩니다.

개발 환경

참고:

이 항목에서 설명하는 기능 중 일부는 Visual C++의 현재 버전에 없을 수도 있습니다. 자세한 내용은 Visual C++ 2005 및 이전 버전의 변경 내용을 참조하십시오.

Visual C++ .NET 2003에서 Visual Studio .NET의 Visual C++ 프로젝트를 열면 이전 프로젝트 파일의 이름이 바뀌고 Visual C++ .NET 2003 환경에 맞는 새로운 프로젝트 파일이 만들어집니다.

.vcproj 파일의 형식이 문서화되었습니다.

다음은 개발 환경의 새로운 기능입니다.

  • $(WebDeployPath), $(WebDeployRoot), $(ParentName), $(RootNameSpace), $(SafeParentName) 및 $(SafeInputName) 매크로가 추가되었습니다.

  • 프로젝트 종속 프로젝트를 빌드하지 않고도 프로젝트를 빌드할 수 있습니다.

Managed Extensions for C++ 프로젝트 템플릿

이 릴리스에는 다음과 같이 Managed Extensions for C++에서 응용 프로그램을 만드는 데 사용할 수 있는 몇 가지 새로운 프로젝트 템플릿이 포함되어 있습니다.

  • Windows 컨트롤 라이브러리 (.NET)

  • Windows Forms 응용 프로그램 (.NET)

  • Windows 서비스 (.NET)

뿐만 아니라 이 릴리스에서는 Visual C++ .NET 2002의 관리되는 프로젝트를 위한 템플릿 이름이 다음과 같이 바뀌었습니다.

  • Managed C++ 응용 프로그램을 이제 **콘솔 응용 프로그램 (.NET)**이라고 합니다.

  • Managed C++ 클래스 라이브러리를 이제 **클래스 라이브러리 (.NET)**라고 합니다.

  • Managed C++ 빈 프로젝트를 이제 **빈 프로젝트 (.NET)**라고 합니다.

  • Managed C++ 웹 서비스를 이제 ASP.NET 웹 서비스라고 합니다.

Managed Extensions for C++용 Windows Forms 디자이너

Visual C++에서는 이번 릴리스에 추가된 Windows Forms 디자이너와 함께 Managed Extensions for C++에서 Windows Forms 응용 프로그램을 만들기 위한 신속한 응용 프로그램 개발 솔루션을 소개합니다.

이 솔루션은 컨트롤과 구성 요소를 Windows Forms 응용 프로그램에 직접 끌어서 놓거나 잘라서 붙여넣을 수 있도록 하는 도구 상자와 서버 탐색기를 완벽하게 지원합니다. 또한 속성 표를 통해 컨트롤과 구성 요소의 속성을 쉽게 조작할 수 있습니다.

프로젝트 빌드 자동화 모델

Visual C++ .NET에서는 프로젝트 빌드 모델을 향상시키기 위해 새로운 속성 페이지 및 여러 가지 새로운 개체와 함께 기존 개체에 대한 새로운 속성과 메서드를 제공합니다.

새로운 속성 페이지

관리되는 리소스 속성 페이지

XML 데이터 생성기 도구 속성 페이지

관리되는 래퍼 속성 페이지

관리되는 보조 래퍼 속성 페이지

새로운 개체

VCALinkTool 개체

VCActiveXReference 개체

VCAssemblyReference 개체

VCAuxiliaryManagedWrapperGeneratorTool 개체

VCManagedResourceCompilerTool 개체

VCManagedWrapperGeneratorTool 개체

VCPrimaryInteropTool 개체

VCProjectReference 개체

VCReference 개체

VCReferences 컬렉션

VCReferenceConfiguration 개체

VCXMLDataGeneratorTool 개체

기존 개체에 대한 새로운 멤버 또는 변경된 멤버

업데이트되었거나 새로 제공되는 몇 가지 속성과 메서드가 기존 개체에 추가되었습니다. 변경되는 내용에는 시그니처 업데이트나 새로운 멤버 추가 등 여러 가지 것들이 포함될 수 있습니다.

개체

새로운 멤버 또는 변경된 멤버

VCCLCompilerTool 개체

EnableEnhancedInstructionSet 속성

 

ToolKind 속성

VCLinkerTool 개체

FixedBaseAddress 속성

 

ToolKind 속성

VCLibrarianTool 개체

ToolKind 속성

VCCustomBuildTool 개체

ToolKind 속성

VCMidlTool 개체

ToolKind 속성

VCResourceCompilerTool 개체

ToolKind 속성

VCPreBuildEventTool 개체

ToolKind 속성

VCPreLinkEventTool 개체

ToolKind 속성

VCPostBuildEventTool 개체

ToolKind 속성

VCBscMakeTool 개체

ToolKind 속성

VCNMakeTool 개체

ToolKind 속성

VCWebServiceProxyGeneratorTool 개체

Namespace 속성(VCProjectEngine)

 

References 속성

 

ToolKind 속성

VCWebDeploymentTool 개체

ToolKind 속성

VCProject 개체

AddAssemblyReference 메서드

 

AddActiveXReference 메서드

 

AddProjectReference 메서드

 

CanAddAssemblyReference 메서드

 

CanAddActiveXReference 메서드

 

CanAddProjectReference 메서드

 

Object 속성

 

References 속성

 

ReferencesConsumableByDesigners 속성

 

RemoveReference 메서드

 

RootNamespace 속성

 

VCReferences 속성

VCFile 개체

AddFile 메서드

 

CanAddFile 메서드

 

FileType 속성

 

Items 속성

 

Object 속성

 

RemoveFile 메서드

VCFilter 개체

Object 속성

VCConfiguration 개체

FullReferencesPath 속성

 

ReferencesPath 속성

 

ReferenceTools 속성

 

SatelliteDLLs 속성

 

StopBuild 메서드

 

StyleSheets 속성

VCStyleSheet 개체

FullReferencesPath 속성

 

ReferencesPath 속성

 

ReferenceTools 속성

 

StyleSheetDirectory 속성

 

StyleSheetName 속성

VCFileConfiguration 개체

ProjectConfiguration 속성

 

Compile 메서드

 

OutputUpToDate 속성

VCProjectEngine 개체

ShowEnvironmentInBuildLog 속성

참고 항목

기타 리소스

Visual C++ 릴리스의 제품 변경 내용