싱글 모니터의 경우는 다음과 같이 얻어 올 수 있다.

left = 0;
top = 0;
right = GetSystemMetrics(SM_CXSREEEN);
bottom = GetSystemMetrics(SM_CYSCREEN);

듀얼모니터의 경우 각각의 모니터 좌표가 아닌 전체 두개이상의 모니터를 합친 전체 영역의 좌표를 구할 필요가 있다.

left = GetSystemMetrics(SM_XVIRTUALSCREEN);
top = GetSystemMetrics(SM_YVIRTUALSCREEN);
right = left + GetSystemMetrics(SM_CXVIRTUALSCREEN);
bottom = top + GetSystemMetrics(SM_CYVIRTUALSCREEN);

모니터의 배치와 기본 위치에 따라서 left, top이 음수 값이 될 수 있으니 주의하도록 하자
저작자 표시 비영리 변경 금지
Posted by ancdesign
프로그래밍2010/07/06 09:09
비활성화 된 윈도우에 마우스 클릭을 할 경우
WM_MOUSEACTIVATE -> WM_ACTIVATE 메시지가 순차로 전달되는데

마우스 클릭에 의한 WM_ACTIVATE 메시지는
WM_MOUSEACTIVATE 메시지를 먼저 보내고 그에 대한 리턴값을 가지고 처리를 하게 된다.
WM_MOUSEACTIVATE 메시지의 리턴값으로 아래 4가지 값이 있다.

MA_ACTIVATE                   윈도우를 활성화 하고 마우스 메시지를 처리한다.
MA_ACTIVATEANDEAT       윈도우를 활성화 하고 마우스 메시지를 무시한다.
MA_NOACTIVATE               윈도우를 활성화 하지 않고 마우스 메시지를 처리한다.
MA_NOACTIVATEANDEAT   윈도우를 활성화 하지 않고 마우스 메시지를 무시한다.

MA_NOACTIVATE(ANDEAT) 값을 리턴할 경우 WM_ACTIVATE 메시지가 전달되지 않게 되어
마우스를 아무리 클릭하더라도 윈도우가 활성화 되지 않는다.
저작자 표시 비영리 변경 금지
Posted by ancdesign

    class ByteBuffer : public std::vector<unsigned char>
    {
    public:
        ByteBuffer(void) {}
        ByteBuffer(size_t size):std::vector<unsigned char>(size) {}
        ByteBuffer(const void* ptr, size_t len)
        {
            append(ptr, len);
        }
        template<class T> void append(const T& b)
        {
            insert(this->end(), (const unsigned char*)&b, (const unsigned char*)&b+sizeof(T));
        }
        void append(const void* ptr, size_t len)
        {
            insert(this->end(), (const unsigned char*)ptr, (const unsigned char*)ptr+len);
        }
        void* ptr(void)
        {
            return &*begin();
        }
    };
Posted by ancdesign
이전  포스팅 중에 atl 관련 보안업데이트로 인해 에러가 나는 경우에 대해서 Dynamic Link to ATL로 변경하여 처리한 글이 있다. (여기)

1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(431) : error C2146: syntax error : missing ';' before identifier 'rgclsidAllowed'
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(431) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(431) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(6053) : error C2039: 'rgclsidAllowed' : is not a member of 'ATL::ATL_PROPMAP_ENTRY'
1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(422) : see declaration of 'ATL::ATL_PROPMAP_ENTRY'
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcom.h(6053) : error C2660: 'ATL::CComVariant::ReadFromStream' : function does not take 4 arguments

이번엔 static으로 atl을 붙여야 하는 작업이 필요해서 관련 자료를 찾아 보았다.
ATL 보안업데이트 (MS09-035) 에 대해서는 좀 더 자세한 자료를 찾을 수 있다.

vs2008 sp1 업데이트 후 윈도우즈 보안업데이트로 위와 같이 에러가 발생하고 ATL 을 Static으로 작업하려고 하는데 에러가 나는 경우는 업데이트가 정상적으로 이뤄지지 않았고 내부적인 ATL 헤더가 교체되지 않았기 때문이다.

이는 Visual Studio 2008 서비스팩1 ATL 보안업데이트 를 통해서 해결이 가능하다.

저작자 표시 비영리 변경 금지
Posted by ancdesign
프로그래밍2009/12/29 16:09

1. 링크 옵션

 옵션

설명 

 -lname  링크할 때 name인 lib를 찾음
 -nodefaultlibs  링크할 때 표준 시스템 lib를 사용하지 않음
 -nostartfiles  링크할 때 표준 시스템 startup 파일을 사용하지 않음
 -nostdlib  링크할 때 표준 시스템 startup과 lib를 사용하지 않는다
 -s  완성된 바이너리에서 모든 심볼 테이블과 재배치 정보를 제거
 -shared

 공유 오브젝트를 생성

(다른 오브젝트와 링크하여 실행 파일을 생성할 수 있음)

 -shared-libgcc  libgcc의 공유 라이브러리 버전을 강제로 지정해서 사용
 -static  정적 라이브러리를 이용하여 링크
 -static-libgcc  libgcc의 정적 라이브러리 버전을 강제로 지정
 -u sym  심볼 sym이 정의되어 있지 않은 것처럼 동작해서, 심볼 sym을 정의한 라이브러리 모듈과 강제로 링크
 -WI, opt  링크 옵션으로 opt를 전달
 -Xlinker opt  링크 옵션으로 opt를 전달

 

2. 경고 옵션

옵션

 설명 

 -fsyntax-only  코드를 컴파일 하지 않고 문법 검사만 함
 -pedantic  ISO표준에서 요구되는 모든 경고 메시지를 설정, 다른 종류의 기능을 받아들이지 않는다
 -pedantic-errors  -pedantic 옵션에 의해서 발생한 경고 메시지를 에러로 변환, 컴파일을 멈춤
 -w  모든 경고 메시지를 출력되지 않도록 함
 -W  특정 상황에서 추가적인 경고 메시지를 출력
 -Wall  모든 경고를 켠다
 -Wbad-function-cast  함수 호출이 호환되지 않는 형으로 변환될 때 까지 경고 메시지를 출력(C 전용)
 -Wcast-qual  형 변환이 형 수식어를 없앨 때 경고 출력 (const char* -> char*)
 -Wchar-subscripts  Char 형 변수가 배열 첨자로 사용될 때 경고 출력
 -Wcomment  중첩된 주석이 있을 때 경고 출력
 -Wconversion  음수 정수형 상수가 부호 없는 정수형에 대입될 때 경고 출력
 -Wdisabled-optimization  사용자가 요구한 최적화가 이루어지지 않았을 때 경고 출력
 -Werror  모든 경고를 에러로 변환해서 컴파일을 멈추게 함
 -Werror-implicit-function-declaration  함수가 처음으로 사용되기 전에 명시적으로 선언되지 않았을 때 에러 출력
 -Wfloat-equal  부동 소수점 값이 등호로 비교되었을 때 경고 출력
 -Wformat  printf()함수 계열에 입력된 인자가 주어진 형식 문자열과 맞지 않을 때 경고 출력
 -Wformat-security  printf()함수 계열에 입력된 인자에 대해 잠재적인 보안 문제가 있을 때 경고 출력
 -Wimplicit  -Wimplicit-int + -Wimplicite-function-declaration
 -Wimplicit-int  선언에서 형을 지정하지 않았을 때 경고 출력
 -Wimplicite-function-declaration  함수가 처음으로 사용되기 전에 명시적으로 선언되지 않았을 때 경고 출력
 -Winline  Inline으로 선언된 함수가 인라인되지 않았을 때 경고 출력
 -Wlarger-than-n  오브젝트 파일의 크기가 n 바이트보다 클 때 경고 출력
 -Wmain  main() 의 반환형이나 선언이 잘못되었을 때 경고 출력
 -Wmissing-braces  집합체나 공용체의 초기화에서 괄호가 잘못된 경우 경고 출력
 -Wmissing-declarations  전역 변수가 선언되지 않고 사용되었을 때 경고 출력
 -Wnested-externs  extern 선언이 함수 선언 안에 있을 때 경고 출력
 -Wno-deprecated-declarations  더 이상 쓰이지 않는 기능을 사용한 것에 대해 경고를 출력하지 않음
 -Wno-div-by-zero  0으로 나눗셈하더라도 경고를 출력하지 않음
 -Wno-format-y2k  2자리 연도를 출력하는 strftime() 형식에 대한 경고를 출력하지 않음
 -Wno-format-extra-args  printf() 함수 계열에 입력된 여분의 인자에 대해 경고를 출력하지 않음
 -Wni-long-long  Long long형을 사용하는 것에 대해 경고를 출럭하지 않음
 -Wno-multichar  멀티 바이트 문자를 사용한 것에 대해 경고를 출력하지 않음
 -Wpadded  구조체가 정렬을 위해 패딩 될 때 경고 출력
 -Wparentheses  잘못된 괄호에 대한 경고 메시지 출력
 -Wpoint-arith  코드 수행이나 구조체가 함수 형이나 void 포인터의 크기에 의존적일  경고 출력
 -Wredundant-decls  오브젝트가 유효 범위 안에서 여러 번 선언되거나, 유효 범위 밖에서 사용되었을 때 경고 출력
-Wreturn-type  함수의 반환형이 지정되지 않았거나 값을 반환하는데 void로 선언된 경우 경고 출력
-Wsequence-point  C sequence point rule을 위반하는 코드에 대해 경고 출력
-Wshadow  지역변수가 다른 지역변수, 매개변수, 내장함수를 ovrride할 때 경고 출력
-Wsign-compare  부호가 있는 값과 부호가 없는 값 비교 시, 형변환 때문에 잘못된 값이 나올 때 경고 출력
-Wstrict-prototypes  함수가 인자 형을 지정하지 않은 채 선언, 정의되었을 때 경고 출력
-Wswitch  Switch 구문에서 모든 경우의 값을 다루지 않을 때 경고 출력
-Wsystem-headers  시스템 헤더 파일의 코드에 대한 경고를 출력
-Wtraditional  ISO표준과 traditional c에서 다르게 동작하거나 없는 코드를 사용했을 때 경고 출력
-Wtrigraphs  주석 영역의 바깥 부분에 3중문자가 있을 때 경고 출력 ex) ??= -> #
-Wundef  정의되지 않은 식별자가 #if…#endif 구분에서 사용되었을 때 경고 출력
-Wuninitialized  자동 변수가 초기화되지 않고 사용되었을 때 경고 출력
-Wunknown-pragmas  GCC가 익식하지 못하는 #pragma가 사용되었을 때 경고 출력
-Wunreachagle-code  실행되지 않은 코드에 대해 경고를 출력
-Wunused  -Wunused 류의 옵션을 모두 켠다
-Wunused-function  선언은 되어 있으나 사용되지 않은 함수에 대해 경고를 출력
-Wunused-parameter  선언은 되어 있으나 사용되지 않은 parameter에 대해 경고를 출력
-Wunused-value  선언은 되어 있으나 사용되지 않은 계산 결과에 대해 경고를 출력
-Wunused-variable  선언은 되어 있으나 사용되지 않은 변수에 대해 경고를 출력

 

3. 디버깅 옵션

 옵션

설명 

 -d [mod]  컴파일 지점 mod에서 디버깅 정보 덤프를 생성
 -fdump-class-hierarchy [-option]  각 클래스의 계층 구성과 가상 함수 테이블을 파일로 덤프
 -fdump-translation-unit [-option]  전체 변환에 대한 트리 구조 표현을 파일로 덤프
 -fdump-tree [-switch[-option]]  여러가지 처리 단계에서 중간 언어 트리를 파일로 덤프
 -fdump-unnumbered  디버깅 정보를 덤프 할 때에 줄 정보와 명령어 숫자를 포함하지 않음
 -fmem-report  각 컴파일 단계에서 메모리 할당에 관한 통계를 표시
 -fpretend-float  타겟 시스템이 호스트 시스템과 같은 부동 소수점 형식을 가진다고 가정함
 -fprofile-arcs   profile 프로그램을 삽입한다.  ex) test.c -> test.c.du
 -ftest-coverage  커버리지 테스트 프로그램임 gcov에서 사용하는 데이터를 생성
 -ftime-report  각 컴파일 단계에 대한 성능 통계를 표시
 -g [n]  시스템 디버깅 형식으로 n 단계 디버깅 정보를 생성 (출력할 정보 양을 지정하기 위해서)
 -gcoff [n]  COFF형식으로 n 단계 디버깅 정보를 생성
 -gdwarf  DWARF 형식으로 디버깅 정보를 생성
 -gdwarf+  GDB에서 쓰이는 확장을 이용해서 DWARF 형식으로 디버깅 정보를 생성
 -gdwarf-2  DWARF 버전 2형식으로 디버깅 정보를 생성
 -ggdb [n]  GDB에서만 사용할 수 잇는 디버깅 정보를 생성
 -gstabs [n]  STABS 형식으로 n 단계 디버깅 정보를 생성
 -gstabs+  GDB에서 쓰이는 확장을 이용해서 STABS형식으로 디버깅 정보를 생성
 -gvms [n]  VMS 형식으로 n단계 디버깅 정보를 생성
 -gxcoff [n]  XCOFF형식으로 n 단계 디버깅 정보를 생성
 -gxcoff+  GDB에서 쓰이는 확장을 이용해서 XCOFF형식으로 디버깅 정보를 생성
 -p  prof 프로그램에서 사용하는 profiling정보를 덤프하는 추가적인 코드 생성
 -pg  gprof 프로그램에서 사용하는 profiling정보를 덤프하는 추가적인 코드 생성
 -Q  컴파일 되는 각각의 함수 이름과 각 컴파일 단계가 얼마나 오래 걸렸는지 표시
 -time  컴파일 단계 각각에서 CPU시간이 얼마나 쓰였는지 표시

 

4. 최적화 옵션

 옵션

설명 

 -O  -O1과 같음
 -O0 (숫자 0)  최적화를 하지 않음
 -O1  코드사이즈의 감소와 실행속도향상을 목표로 최적화함,변수를 레지스터에 할당하거나,다중조건점프의 최적화 등을 행함
 -O2  고도의 최적화를 하며, 대부분이 최적화가 됨. 
루프전개와 함수의 인라인전개,레지스터의 rename을 하지않음.
 -O3  -O2 것보다 진보된 최적화를 행함. 
루프전개나 함수의 인라인 전개등도 행함.
 -Os  코드사이즈를 작게 하기 위한 최적화를 행함. 
-O0∼3등의 실행 속도를 향상시키는 옵션을 모두 병행할 수 있음.

 

5. i386 / AMD x86-64 옵션

 옵션

설명 

 -mtune=cpu-type  cpu-type에 최적화된 바이너리를 생성
 -march=cpu-type  지정한 cpu-type을 위한 명령어를 생성
(-mcpu=CPU-type을 포함)
 -mfpmath=unit  부동 소수점 유닛 unit에 맞는 부동 소수점 연산을 생성(unit:387,sse)
 -masm=dialect  dialect를 사용해서 asm 명령어를 출력
 -mno-fancy-math-387  GCC가 387에 대한 sin, cos, sqrt 명령어를 생성하지 않게 됨
 -mno-fp-ret-in-387  GCC는 값을 반환할 때, 일반적인 CPU 레지스터를 사용해서 반환
 -msoft-float  부동 소수점 연산에 대해 라이브러리 호출을 담고 있는 출력을 생성
 -maccumulate-outgoing-args  함수 도입부에서 인자가 필요한 공간의 최대 크기 계산(-mpush-args 포함)
 -m128bit-long-double  Long double을 저장하는데 128비트를 사용함
 -malign-double  double, long double, long long 변수를 2워드 경계로 정렬
 -mpreferred-stack-boundary=num  스택 경계를 2의 num승 바이트 경계로 정렬
시스템에 따라 필요한 경계 값이 다름
 -msahf  GCC가 64 bit로 생성된 SAHF 명령을 사용 할 수 있도록 함
 -mrecip  RCPSS와 RSQRTSS 명령을 사용 할 수 있도록 함
 -mmmx  MMX 확장 명령어에 대한 직접적인 접근을 가능하게 해주는 내장 함수를 사용 가능
 -msse  SEE 확장 명령어에 대한 직접적인 접근을 가능하게 해주는 내장함수를 사용 가능
 -mrtd  고정된 개수의 인자를 받는 함수가 num명령어와 함께 반환되어 반환 도중에 인자를 꺼내는 함수 호출 방식을 사용 할 수 있음
 -m96bit-long-double  Long double을 저장하는데 96비트를 사용함
 -mregparm=num  정수형 인자를 전달하는데 사용하는 레지스터의 개수를 조정할 수 있음
 -m3dnow  3Dnow 확장 명령어에 직접 접근이 가능하게 해주는 내장함수 사용 가능
 -mcpu=CPU-type  지정한 CPU-type을 위해 만들어진 코드를 조정
 -momit-leaf-frame-pointer  리프 함수를 위한 레지스터에서 프레임 포인터를 유지하지 않음
 -mthreads  Mingw32 플랫폼에서 thread safe exception처리를 지원
 -mno-align-stringops  인라인된 문자열 연산의 목표 지점을 정렬하지 않음
 -minline-all-stringops  모든 문자연 연산을 인라인 함, 코드 사이즈는 커지지만 작은 길이의 문자열의 경우 성능 향상
 -mpush-args  매개변수를 저장하는데 PUSH 연산을 사용
 -mno-tls-direct-seg-refs  TLS 변수에 대한 컨트롤
 -mstackrealign  Runtime stack을 재정렬

 


출처 : http://alisa2304.tistory.com/105

Posted by ancdesign

Directshow를 사용하면서 EVR을 사용하여 프로그래밍하는 경우

IMFVideoDisplayControl 인터페이스를 사용하여 화면 비율 또는 사이즈 변경시

깜박이는 문제가 발생하는 경우가 종종 있다.

EVR에서는 IMFVideoMixerControl 인터페이스를 추가로 생성하여

화면 비율 및 사이즈 변경시

IMFVideoMixerControl::SetStreamOutputRect 으로 전체 비디오 윈도우에서 화면 비율을 계산하여 값을 설정해 준 후

IMFVideoDisplayControl::SetVideoPosition 으로 전체 비디오 윈도우 영역을 설정해 주면 화면 비율 및 사이즈 조절 시 flickering 현상이 제거된다.
저작자 표시 비영리 변경 금지
Posted by ancdesign
프로그래밍2009/12/17 16:24
프로그램 디버깅 중 마우스로 메뉴를 왔다갔다 하는 경우 발생하게 되는데

메뉴에 마우스가 오버되었을 때 해당 아이템에 해당하는 텍스트를 statusbar에 표시하여야 하는데

0x805B에 해당하는 prompt 문자열이 없어서 발생하는 것으로 해당 값을 10진수로 변경하여 resource.h에 추가하면 된다.

Posted by ancdesign
프로그래밍2009/12/16 15:50
cmd->C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ 위치에 devenv.exe /resetuserdata 입력
Posted by ancdesign
프로그래밍2009/11/06 10:55
C/C++ 컴파일러 옵션

--------------------[최적화]------------------------------------------------------

/O1    공간을 최소화합니다.                      
/O2    속도를 최대화합니다.
/Ob<n> 인라인 확장 (기본값 n=0)          
/Od    최적화를 사용하지 않습니다(기본값).
/Og    전역 최적화를 사용합니다.             
/Oi[-] 내장 함수를 사용합니다.
/Os     코드 공간을 우선 고려합니다.        
/Ot     코드 속도를 우선 고려합니다.
/Ox     최적화를 최대화합니다.                  
/Oy[-] 프레임 포인터를 생략합니다.

--------------------[코드생성]----------------------------------------------------

/GF      읽기 전용 문자열 풀링을 사용합니다.      
/Gm[-] 최소 다시 빌드를 사용합니다.
/Gy[-]  링커 분리 함수를 사용합니다.               
/GS[-]  보안 검사를 사용합니다.
/GR[-]  C++ RTTI를 사용합니다.           
/GX[-]  C++ EH를 사용합니다(/EHsc와 동일).
/EHs     C++ EH를 사용합니다(SEH 예외 제외).  
/EHa     C++ EH를 사용합니다(SEH 예외 포함).
/EHc extern "C" 기본값을 nothrow로 설정합니다.
/fp:<except[-]|fast|precise|strict> 부동 소수점 모델 선택:
     except[-] - 코드 생성 시 부동 소수점 예외를 고려합니다.
     fast - "fast" 부동 소수점 모델입니다. 결과를 예측하기 힘듭니다.
     precise - "precise" 부동 소수점 모델입니다. 결과를 예측할 수 있습니다.
     strict - "strict" 부동 소수점 모델(/fp:except를 의미)

/Qfast  _transcendentals는 /fp:except가 있더라도 인라인 FP 내장을 생성합니다.
/GL[-]   링크 타임 코드 생성을 사용합니다.
/GA     Windows 응용 프로그램에 맞게 최적화합니다.
/Ge       모든 함수에 대해 스택 검사를 수행합니다.
/Gs[num] 스택 검사 호출을 제어합니다.  
/Gh       _penter 함수 호출을 사용합니다.
/GH      _pexit 함수 호출을 사용합니다.      
/GT      파이버 안전 TLS 액세스를 생성합니다.
/RTC1 빠른 검사를 사용합니다(/RTCsu).   
/RTCc 작은 형식 검사로 변환합니다.
/RTCs 스택 프레임 런타임 검사를 수행합니다.
/RTCu 초기화되지 않은 지역 변수가 사용되는지 검사합니다.
/clr[:option] 공용 언어 런타임에 대해 컴파일합니다. 옵션:
      pure - IL 전용 출력 파일을 생성합니다(네이티브 실행 코드 제외).
      safe - 확인할 수 있는 IL 전용 출력 파일을 생성합니다.
      oldSyntax - Visual C++ 2002/2003의 Managed Extensions 구문을 허용합니다.
      initialAppDomain - Visual C++ 2002의 초기 AppDomain 동작을 사용합니다.
      noAssembly - 어셈블리를 생성하지 않습니다.
/Gd    __cdecl 호출 규칙                   
/Gr    __fastcall 호출 규칙
/Gz    __stdcall 호출 규칙                 
/GZ  스택 검사를 사용합니다(/RTCs).
/QIfist[-] ftol() 대신 FIST를 사용합니다.
/hotpatch 핫 패치 가능 이미지에 대한 함수 패딩을 확인합니다.
/arch:<SSE|SSE2> 최소 CPU 아키텍처 요구 사항입니다. 다음 중 하나가 될 수 있습니다.
    SSE - SSE를 사용할 수 있는 CPU의 명령을 사용합니다.
    SSE2 - SSE2를 사용할 수 있는 CPU의 명령을 사용합니다.
/Qimprecise_fwaits "try" 내부가 아니라 "try" 경계에만 FWAIT를 생성합니다.

--------------------[출력파일]-------------------------------------------------------------------------------------

/Fa[file]   어셈블리 목록 파일 이름을 지정합니다.
/FA[scu]  어셈블리 목록을 구성합니다.    
/Fd[file] .PDB 파일 이름을 지정합니다.
/Fe<file> 실행 파일 이름을 지정합니다.  
/Fm[file] 맵 파일 이름을 지정합니다.
/Fo<file> 개체 파일 이름을 지정합니다.  
/Fp<file> 미리 컴파일된 헤더 파일 이름을 지정합니다.
/Fr[file] 소스 브라우저 파일 이름을 지정합니다.
/FR[file] 확장 .SBR 파일 이름을 지정합니다.
/doc[file] XML 문서 주석을 처리하고 선택적으로 .xdc 파일의 이름을 지정합니다
.

--------------------[전처리기]------------------------------------------------------------------------------------

/AI<dir>   어셈블리 검색 경로에 추가합니다.
/FU<file> 어셈블리/모듈을 강제 사용합니다. 
/C 주석을 제거하지 않습니다.            
/D<name>{=|#}<text> 매크로를 정의합니다.
/E    stdout으로 전처리합니다.             
/EP  #line 없이 stdout으로 전처리합니다.
/P    파일로 전처리합니다.                 
/Fx   삽입된 코드를 파일에 병합합니다.
/FI<file> 강제 포함 파일 이름을 지정합니다.
/U<name> 미리 정의된 매크로를 제거합니다.
/u          미리 정의된 모든 매크로를 제거합니다.
/I<dir> 포함 검색 경로에 추가합니다.
/X        "표준 위치"를 무시합니다.           

--------------------[언어]--------------------------------------------------------

/Zi    디버깅 정보를 사용합니다.           
/Z7   이전 스타일 디버그 정보를 사용합니다.
/Zp[n]  n-바이트 경계에서 구조체를 압축합니다.
/Za    확장명을 사용하지 않습니다.         
/Ze    확장명을 사용합니다(기본값).
/Zl     .OBJ에서 기본 라이브러리 이름을 생략합니다.
/Zg     함수 프로토타입을 생성합니다.       
/Zs     구문 검사만 수행합니다.
/vd{0|1|2} vtordisp를 사용하지 않거나 사용합니다.
/vm<x> 멤버에 대한 포인터 형식입니다.   
/Zc:arg1[,arg2] C++ 언어 규칙이며 인수는 다음과 같습니다.
    forScope[-] - 표준 C++ 범위 지정 규칙을 적용합니다.
    wchar_t[-] - wchar_t는 네이티브 형식이며 형식 정의가 아닙니다.
/ZI     편집하며 계속하기 디버그 정보를 사용합니다.
/openmp OpenMP 2.0 언어 확장을 사용합니다.

--------------------[기타]--------------------------------------------------------

@<file> 옵션 지시 파일                  
/?, /help 이 도움말 메시지를 인쇄합니다.
/bigobj 확장 개체 형식을 생성합니다.    
/c 컴파일만 하고 링크는 하지 않습니다.
/errorReport:option Microsoft에 내부 컴파일러 오류를 보고합니다.
    none - 보고서를 보내지 않습니다.    
    prompt - 즉시 보고서를 보낼지 여부를 묻습니다.
    queue - 관리자가 다음에 로그온할 때 보고서를 보낼지 여부를 묻습니다(기본값).
    send - 자동으로 보고서를 보냅니다.  /FC 진단에 전체 경로 이름을 사용합니다.
/H<num> 외부 이름의 최대 길이입니다.    
/J            기본 문자 형식을 unsigned로 지정합니다.
/MP[n]   컴파일하기 위한 프로세스를 'n'개까지 사용합니다.
/nologo    저작권 메시지를 표시하지 않습니다.
/showIncludes 포함 파일의 이름을 표시합니다.
/Tc<source file> 파일을 .c로 컴파일합니다.
/Tp<source file> 파일을 .cpp로 컴파일합니다.
/TC       모든 파일을 .c로 컴파일합니다.      
/TP       모든 파일을 .cpp로 컴파일합니다.
/V<string> 버전 문자열을 설정합니다.    
/w          모든 경고를 사용하지 않습니다.
/wd<n> 경고 n을 사용하지 않습니다.      
/we<n> 경고 n을 오류로 처리합니다.
/wo<n> 경고 n을 한 번 발생시킵니다.     
/w<l><n> n에 대해 경고 수준(1-4)을 설정합니다.
/W<n> 경고 수준을 설정합니다(기본값 n=1).
/Wall    모든 경고를 사용합니다.           
/WL     한 줄 진단을 사용합니다.
/WX    경로를 오류로 처리합니다.           
/Yc[file]   .PCH 파일을 만듭니다.
/Yd          모든 .OBJ에 디버그 정보를 입력합니다.
/Yl[sym]  디버그 라이브러리에 .PCH 참조를 삽입합니다.
/Yu[file]   .PCH 파일을 사용합니다.       
/Y-          모든 PCH 옵션을 사용하지 않습니다.
/Zm<n> 최대 메모리를 할당합니다(기본값의 %).
/Wp64   64비트 이식 경고를 사용합니다.  
 

--------------------[링크]--------------------------------------------------------

/LD     .DLL을 만듭니다.                    
/LDd   .DLL 디버그 라이브러리를 만듭니다.
/LN .netmodule을 만듭니다.             
/F<num> 스택 크기를 설정합니다.
/link [링커 옵션 및 라이브러리]         
/MD     MSVCRT.LIB에 링크합니다.
/MT     LIBCMT.LIB에 링크합니다.            
/MDd   MSVCRTD.LIB 디버그 라이브러리에 링크합니다.
/MTd   LIBCMTD.LIB 디버그 라이브러리에 링크합니다.



출처: http://wewillsoft.com/20090806909

Posted by ancdesign
프로그래밍2009/10/28 08:59
DirectShow 필터의 CLSID를 가지고 실경로를 구할 때 얻어지는 상대 경로를 실경로로 변환

Video Mixing Renderer 9의 필터 정보를 알고자 할 때
해당 CLSID를 가지고 아래 레지스트리값을 참조하여
HKEY_CLASSES_ROOT\CLSID\{51B4ABF3-748F-4E3B-A276-C828330E926A}\InprocServer32 

%SystemRoot%\system32\quartz.dll 다음과 같은 키값을 얻을 수 있다.
위 경로를 가지고 CreateFile을 할 경우 에러를 얻게 되는데 이런 경우 위와 같은 경로를
DWORD WINAPI ExpandEnvironmentStrings(  __in          LPCTSTR lpSrc,  __out         LPTSTR lpDst,  __in          DWORD nSize);
위와 같은 함수로 C:\Windows\system32\quartz.dll로 변환하여 얻을 수 있다.
저작자 표시 비영리 변경 금지
Posted by ancdesign