Visual Studio
TIPs 2009. 1. 16. 12:24
__declspec (novtable)
원문 : Component Development with Visual C++ & ATL
추상적인 클래스의 생성자에서 초기화된 가상 함수 테이블 포인터는 파생 클래스의 생성자에 의해 다시 한번 덮어 씌여 지게 되므로 필요없게 된다.
따라서 ATL_NO_VTABLE 매크로가 지정될 때 링커는 가상 함수 테이블과 가상 함수를 없애고 가상 함수 테이블 포인터를 적절하게 초기화할 수 있게 된다.
기본적으로 ATL Object Wizard가 생성한 클래스에는 ATL_NO_VTABLE 매크로가 지정되어 있다. 그러나 클래스의 생성자에서 가상 함수를 호출하지 않도록 주의해서 사용해야 한다.
클래스 생성자에서 가상 함수를 호출해야 할 경우가 필요하다면 이 코드는 FinalConstruct 멤버 함수에서 처리해햐 한다. FinalConstruct 멤버 함수가 호출되는 경우에는 이미 COM 객체 클래스의 인스턴스가 생성되어 초기화가 된 상태가 되므로 안전하게 가상 함수를 호출할 수 있게 된다.
원문 : Component Development with Visual C++ & ATL
추상적인 클래스의 생성자에서 초기화된 가상 함수 테이블 포인터는 파생 클래스의 생성자에 의해 다시 한번 덮어 씌여 지게 되므로 필요없게 된다.
따라서 ATL_NO_VTABLE 매크로가 지정될 때 링커는 가상 함수 테이블과 가상 함수를 없애고 가상 함수 테이블 포인터를 적절하게 초기화할 수 있게 된다.
기본적으로 ATL Object Wizard가 생성한 클래스에는 ATL_NO_VTABLE 매크로가 지정되어 있다. 그러나 클래스의 생성자에서 가상 함수를 호출하지 않도록 주의해서 사용해야 한다.
클래스 생성자에서 가상 함수를 호출해야 할 경우가 필요하다면 이 코드는 FinalConstruct 멤버 함수에서 처리해햐 한다. FinalConstruct 멤버 함수가 호출되는 경우에는 이미 COM 객체 클래스의 인스턴스가 생성되어 초기화가 된 상태가 되므로 안전하게 가상 함수를 호출할 수 있게 된다.
#pragma
예) 임시로 경고 끄기
#pragma warning(push)
#pragma warning(disable:4483)
...
#pragma warning(pop)
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat
[속성] 페이지에서 만들어진 매크로 ( Inside Microsoft Visual Studio .NET )
매크로 | 설명 | |
ConfigurationName | 현재 프로젝트 구성 |
|
DevEnvDir | Visual Studio .NET 설치 폴더 |
|
FrameworkDir | .Net Framework 설치 폴더 |
|
FrameworkSDKDir | .Net Framework SDK 설치 폴더 |
|
FrameworkVersion | .Net Framework 버전 번호 |
|
Inherit | Visual Studio .NET이 만든 명령줄에서 상속된 속성의 순서 |
|
InputDir | 입력 파일 폴더는 프로젝트 파일 폴더와 같다 |
|
InputExt | 입력 파일의 확장자 |
|
InputFileName | 입력 파일의 이름 (이름 + 확장자) |
|
InputName | 입력 파일명 |
|
InputPath | 입력 파일 경로 |
|
IntDir | 중개 파일(Intermediate file) 경로 |
|
NoInherit | 속성이 상속되지 않게 한다. |
|
OutDir | 출력 폴더 |
|
PlatformName | Win32 또는 .NET인 프로젝트 플랫폼의 이름 |
|
ProjectDir | 프로젝트 파일이 있는 폴더 |
|
ProjectExt | 프로젝트 확장자(.vcproj) |
|
ProjectFileName | 프로젝트의 전체 이름 |
|
ProjectName | 프로젝트의 이름 |
|
ProjectPath | 프로젝트 파일의 전체 경로 |
|
RemoteMachine | 원격지 컴퓨터(원격 디버깅을 하는 경우) |
|
SolutionDir | 솔루션 파일이 있는 폴더 |
|
SolutionExt | 솔루션 파일의 확장자(.sln) |
|
SolutionFileName | 솔루션의 전체 이름 |
|
SolutionName | 솔루션의 이름 |
|
SolutionPath | 솔루션 파일의 전체 이름 |
|
TargetDir | 프로젝트의 Output 폴더 |
|
TargetExt | 출력 대상의 확장자 |
|
TargetFileName | 대상 파일명 |
|
TargetName | 대상의 이름 |
|
TargetPath | 대상의 전체 경로 |
|
VCInstallDir | Visual C++ .NET 설치 폴더 |
|
VSInstallDir | Visual Studio .NET 설치 폴더 |
빌드 이벤트
빌드 이벤트 폴더를 사용해서 빌드 프로세스 중에 어플리케이션과 스크립트를 실행할 수 있다.
대상 폴더를 여는 예 : Explore.exe $(TargetDir)
프로젝트 종속성 설정
프로젝트 종속성을 설정하면 두 가지가 보장됩니다.
첫째, 특정 프로젝트에서 필요로 하는 종속 파일을 항상 찾을 수 있도록 프로젝트들이 정확한 순서로 빌드됩니다.
둘째, 종속 프로젝트의 출력 디렉터리가 암시적으로 경로에 추가되어 링크 타임에 해당 파일을 쉽게 찾을 수 있습니다.
원문 : http://msdn.microsoft.com/ko-kr/library/ms235517.aspx
컴파일러 옵션
/RTCn : 런타임 에러 확인
최적화된 /O 빌드와 함께 사용되지 않는다.
/RTCs(스택오류), /RTCu(초기화되지 않은 변수 사용), /RTCc(작은 변수와 배열에 더 큰 데이터를 할당)
/GS : 버퍼 오버런 확인
/GL : 프로젝트에 대해 전체 프로그램의 최적화를 실시
/MP : 멀티 프로세서를 이용하여 빌드