컴포넌트 38

웹페이지 프레임 포함 전체 소스 추출

// 깔끔하게 만들려고 노력했다. // 에러처리 완벽하게 할려고 했다. /* // LPWSTR lpszSource; // WCHAR 포인터(유니코드 문자열) 변수 할당 if(GetHtmlSource(pDoc, &lpszSource)){ // 성공여부 체크 //ClipBoardTextCopyW(lpszSource); // 필요한 작업~~~~ //..... //.... //... free(lpszSource); // ★ 작업이 끝나면 반드시 해제하자 } */ int __stdcall GetHtmlSource(IHTMLDocument2 *pDoc, LPWSTR *ppszText) { int iRunCount = 0; // 함수 실행 횟수 제한키 위해 int iSuccessCount = 0; // 성공적으로 프..

웹, HTML 2009.07.08

고급 액티브X 컨트롤에 도전하자

지난 연재에서는 컨트롤의 내부를 살펴봤다. 이번호에서는 보다 좋은 컨트롤을 만들기 위한 외부적인 기능들을 몇 가지 소개하고 3회에 걸친 연재를마치려고 한다. 컨트롤이 IE 안에서 다양한 기능을 수행하기 위해 기본적으로 제공해야 할 기능이 있다. 이번호에서는 메모리 DC를 사용한 부드러운 화면 처리, 툴팁의 제공, 쓰레드의 활용 등 대표적인 기능들을 하나씩 살펴보겠다. 웹을 기반으로 하는 프로젝트에서 중요 기능을 액티브X 컨트롤로 개발하기 위해서는 몇 가지 선행 지식이 있어야 한다. 우리는 지난 1회 연재를 통해 전체 개발 프로세스를 알아왔다. 컨트롤을 어떻게 만들고 어떻게 분배하는지를 볼 수 있었을 것이다. 2회 연재에서는 좀더 이론적인 부분으로 들어가 IE의 내부적인 구조와 이 구조에 따른 컨트롤의 특..

ActiveX 2008.09.14

COM, ATL에서의 reinterpret_cast 의 쓰임새

그동안 C++에서 reinterpret_cast를 배우긴 배웠는 데 실제로 써먹는 경우가 없었다. 그런데 컴포넌트 작성하면서 쓰게 될 줄이야~~~ 커넥션 포인터 관련 얻는 부분의 코드 조각이다. m_rgpCP[0] = new CConnectionPoint(reinterpret_cast(this), DIID__DIDragonEvents); 사전적 의미는 "재해석해서 캐스트"한다.... 즉 강제 형변환 캐스팅이다. 컴파일러는 약간 지능적이다. 클래스 형변환시 부모 - 자식 관계의 형태에서 포인터 관련코드 디버그해보면서 놀랐던 기억이 난다. 그 전까지 형변환으로 사용했던 것은 모두 reinterpret_cast(강제 형변환) 의미를 가진 것이었다. 이를테면 핸들값을 스파이로 알 경우.... HWND hWnd ..

COM, ATL 2008.09.11

ATL_NO_VTABLE

Visual C++ 개념: 프로젝트 만들기 및 관리 ATL 프로젝트에 대한 컴파일러 최적화 지정 기본적으로 ATL 컨트롤 마법사는 ATL_NO_VTABLE 매크로를 사용하여 다음과 같이 새 클래스를 생성합니다. 코드 복사class ATL_NO_VTABLE CProjName { ... }; 그런 다음 ATL은 다음과 같이 _ATL_NO_VTABLE을 정의합니다. 코드 복사#ifdef _ATL_DISABLE_NO_VTABLE #define ATL_NO_VTABLE #else #define ATL_NO_VTABLE __declspec(novtable) #endif _ATL_DISABLE_NO_VTABLE을 정의하지 않으면 ATL_NO_VTABLE 매크로가 declspec(novtable)으로 확장됩니다. 클래..

COM, ATL 2008.08.30

BSTR 자료형 고찰과 사용시 주의점

BSTR은 자동화 타입에서 사용되는 문자열 자료형로서 메모리상에 처음 4바이트는 문자열의 길이값이 입력되고 그 후 유니코드의 문자열이 위치한다. 자동화(Automaton)에 사용되는 자료형의 하나이며 인터페이스에 dual 이나 automation(커스텀 인터페이스일지라도 이 속성을 주면 타입라이브러리 마샬링을 수행한다.) 속성이 존재하거나 dispinterface 등 IDispatch 관련 인터페이스인 경우 오토메이션 마샬러인 타입라이브러리 마샬링을 행할 것이다. 참고로 idl파일에서 [string] 속성을 주지 못한다. 이 속성을 주면 컴파일시 에러메시지가 검출된다. 메모리 할당과 해제는 CoTaskMemAlloc, CoTaskMemFree를 사용하지 않고 SysAllocString과 SysFreeSt..

COM, ATL 2008.08.29

싱크 부분 구현 참조.....

InkOverlayEv.h C:\home\SVGCats_src\src\InkOverlayEv.h [–ÚŽŸ | Œ^EƒNƒ‰ƒXE\‘¢‘Ì | ƒ}ƒNƒ] –ÚŽŸ 1. IUnknown Interface 2. IDispatch Interface 3. Events - overridden functions 4. Methods 5. Data Members Œ^EƒNƒ‰ƒXE\‘¢‘̈ꗗ InkOverlayEvents ƒNƒ‰ƒX ƒ}ƒNƒˆê—— INKOVERLEYEV_H ƒ}ƒNƒ 1|/* 2|* This file was made by refering from Tablet PC SDK. 3|* "E:\Program Files\Microsoft Tablet PC Platform SDK\Sa..

COM, ATL 2008.08.28