8월, 2019의 게시물 표시

COM coding시 알아둘점

시간날때 아래는 읽어보도록 하고 https://docs.microsoft.com/en-us/windows/win32/learnwin32/com-coding-practices __uuidof 연산자 다음과 같은 에러의 의미는 unresolved external symbol "struct _GUID const IID_IDrawable" GUID 상수가 외부에서 선언되었고, 링커가 해당 상수의 정의를 찾을 수 없음을 의미. GUID 상수는 대개 정적라이브러리파일에서 노출되는데. __uuidof 연산자를 사용하면 해당 정적라이브러리파일을 링크하지 않아도 된다(물론 MS-VC++에서만) 이 연산자는 MS 언어 확장이기 때문이다. 이 연산자는 표현식에서 GUID 상수를 리턴해준다. 표현식은 인터페이스 형식 이름, 클래스 이름, 인터페이스 포인터일 수 있다. CoCreateInstance의 기본 패턴은 CoCreateInstance (개체의 클래스 식별자, ..., 검색할 인터페이스, [OUT] 인터페이스 포인터) IDirectPlay8Peer* g_pDP=NULL; CoCreateInstance ( CLSID_DirectPlay8, NULL, CLSCTX_INPROC_SERVER,                         IID_IDirectPlay8Peer, (LPVOID *)&g_pDP ); 이를 __uuidof 연산자를 이용하면 IDirectPlay8Peer* g_pDP=NULL; CoCreateInstance ( __uuidof(DirectPlay8Peer), NULL, CLSCTX_INPROC_SERVER,                          __uuidof(IDirectPla...

NSE 아이콘 오버레이 추가하는 방법

https://stackoverflow.com/questions/20975679/icon-overlay-handlers-for-namespace-extension NSE에서 아이템에 대해 아이콘 오버레이를 추가하는 유일한 방법은 IShellIconOveray 를 구현하는 것임. 해당 인터페이스의 GetOverlayIndex , GetOverlayIconIndex 는 SHELL image list에서 받은 아이콘을 리턴해야 한다. SHGetIconOverlayIndex API를 통해서 얻어올 수 있다. SHELL image list에 추가 오버레이 아이콘을 추가할 방법은 없다. 표준 오버레이 아이콘을 사용하고자 한다면 SHGetIconOverlayIndex 만을 사용하면 된다. 커스텀 오버레이 아이콘을 사용하고자 하면 단순 additional overlay shell extention 을 사용해야 한다. overlay shell extention 은 추가 오버레이 아이콘을 SHELL image list에 추가할 수 있다. IShellIconOveralyIdentifier . GetOverlayInfo 1) 에서 icon 과 인덱스를 리턴해야 한다. 해당 인터페이스의 IsMemberOf 2) 는 항상 S_FALSE 리턴한다. 네가 구현하는 NSE에서 해당 인터페이스의 GetOverlayIndex 3) 에서 네가 선호하는 아이콘과 인덱스로 SHGetIconOverlayIndex를 호출한다. 아래에서는 위에서 언급한 대로 IShellIconOverlayIdentifier를 구현했다. https://stackoverflow.com/questions/31884145/custom-icon-overlays-for-namespace-extension?noredirect=1&lq=1 GetOveralyInfo ()에서 icon 파일과 인덱스를 리턴한다. IsMemberOf ()에서 시스템의 다른 파일에 대한 오버레이를 표시하지 않기 위해 S_FA...