- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[API/MFC] C++와 COM 프로그래밍 본문
1. 모바일 플렛폼과 종류
모바일 플랫폼이란 표준규격에 따라 작성된 응용프로그램을 실행시킬 수 있는 단말기 실행환경을 말한다.
예를들어, DirectX라는 윈도우 환경의 게임 개발 환경을 들 수 있다. Windows라는 운영체제에서 DirectX API(Application Program Interface)를 사용해서 작성된 응용 프로그램이 있다면, DirectX에서 사용된 API를 OS에서 지원하는 특정 함수를 사용해서 구현을 하였고, 윈도우에서 지원하는 함수는 단순한 맵핑의
기능을 지원한다.
다시말하면, 모바일 플랫폼이란 단말 응용프로그램에 사용한 API와 단말 os에서 지원하는 기능을 맵핑시켜 줌으로써, 개발자는os단까지 접근 할 필요가 없이 플랫폼에서 지원하는 API를 사용해서 응용프로그램을 개발하면, 플랫폼에서는 제공하는 API 가 OS에서 지원하는 기능을 만족하도록 지원함을 의미한다.
종류
2. 위피란?
플랫폼 개발사 개발언어 개발방식 이통사 WIPI 한국무선인터넷표준화포럼(KWISP) 한국전자통신연구원(ETRI) C/JAVA 바이너리 SKT, KTF, LGT GVM 신지소프트(SINJISOFT) C 스크립트 SKT BREW 퀄컴(QualComm) C 바이너리 KTF MAP 모빌탑(MobileTop) C 바이너리 KTF SK-VM 엑스씨이(XCE) JAVA 스크립터 SKT
이동통신사의 다양한 플랫폼으로 인해 발생되는 문제점을 극복하기 위해 개발된 모바일 .
이동통신 단말기용 응용프로그램 실행환경을 표준화한 규격이다.
WIPI(c-let)과 WIPI(J-let)로 나뉜다.
Java 언어로 작성된 프로그램에 대해 고속 바이너리 코드 실행환경을 제공한다.
다중 응용프로그램의 동시 실행환경을 제공
다중 응용프로그램 간 통신기능을 제공
고효율적인 메모리 관리
3. com이란?
COM(component Object Model)
COM은 다양한 언어로 만들어진 소프트웨어 컴포넌트들이 자신의 기능을 다른 소프트웨어와
공유하고 통합될 수 있도록 하는, 이진 코드 레벨에서의 표준과 서비스를 총칭하는 것.
4. com의 특징
-COM은 인터페이스 표준
COM은 소프트웨어 컴포넌트들의 통합을 위한 인터페이스 표준규격
소프트웨어 컴포넌트가 다른 컴포넌트와 연결되는 인터페이스는 COM 표준
소프트웨어 컴포넌트의 내부는 자유롭게 만들 수 있음
-언어 중립적인 표준
COM은 윈도우 환경에서 실행되는 모든 실행 모듈에 적용될 수 있음
실행 모듈을 만드는 언어
C/C++, 자바, 비주얼 베이직, 델파이, 파워빌더, 코볼, Jscript, VBScript등 어떤 것이든 될 수 있음.
-바이너리 표준
COM은 DLL이나 EXE 파일 등과 같은 바이너리 레벨에서의 표준임
소스코드가 공개되지 않은 소프트웨어 컴포넌트도 COM을 이용하여 통합할 수 있음.
서로 다른 언어로 개발된 소프트웨어 컴포넌트들도 통합할 수 있음.
5. 용어
● COM 인터페이스
- 인터페이스는 함수의 내용을 구현하지 않고 그냥 껍데기만 선언한 것.
- 역할: 어떤 기능을 실제로 구현한 것이 아니라, 서로 다른 소프트웨어
컴포넌트 간에 공유 가능한 기능의 형태를 정의 하는 것임.
- 인터페이스는 서로 다른 소프트웨어 컴포넌트가 기능을 공유할 수 있도록 해주는
연결 고리로서, 호출하는 쪽과 호출되는 쪽 사이에 이렇게 하자고 약속을 정한 것임.
- 인터페이스 이름 앞에 I를 붙여서 표현함.
- 인터페이스는 다른 인터페이스에서 상속 받을 수 있음
=인터페이스 제약사항
인터페이스는 자신의 멤버로 함수만 갖는다(변수를 멤버로 가질수 없다)
인터페이스 내의 멤버 함수는 순수 가상 함수 형태로 선언되야 한다
인터페이스의 멤버함수는 HRESULT라는 데이터 타입을 리턴해야 한다
위와 같은 방법으로 정의된 인터페이스를 외부에 공표하면 절대로 바꾸면 안된다.
● 메서드
- 인터페이스가 가지고 있는 함수를 부르는 말
● IUnknown 인터페이스
- IUnknown 인터페이스의 세개의 메서드
AddRef : 컴포넌트의 생명을 관리한다. 참조 카운트를 증가시킨다.
Release : 참조 카운트를 감소킨다. 참조카운트가 0이면 아무도 인터페이스를 사용하지
않는 것으로 보고 컴포넌트 스스로 소멸시켜야 한다.
QueryInterface : 함수는 인터페이스 식별자인 IID를 in 파라미터(클라이언트가 컴포넌트에게 전달하는 파라미터)
로 받아서 이와 일치하는 인터페이스를 컴포넌트가 제공하는지 살펴보고 만약 제공한다면 그 인터페이스에 대한
포인터를 두번째 파라미터인 ppv out 파라미터(컴포넌트가 클라이언트에게 전달하는 파라미터)로 넘겨준다.
IID를 조회(query)해서 일치하는 인터페이스의 포인터를 넘겨준다.
- 모든 COM 인터페이스는 이 세개의 메서드를 가져야함
● CoClass(Component Object Class)
- CoClass는 하나 이상의 인터페이스와 그 인터페이스를 실제 구현하는 코드
- CoClass는 C++의 클래스처럼 오브젝트 단위로 소프트웨어 컴포넌트를 구현하는 기본 단위
- 인터페이스는 유사한 기능들을 논리적인 단위로 다시 한번 묶어주는 역할을 하는 것
● COM 오브젝트
- COM 오브젝트는 CoClass가 인스턴스화 되어 메모리에 생성된 것
● COM 서버
- COM 서버는 한 또는 그 이상의 CoClass가 모여서 만들어짐.
- DLL, EXE 파일에 저장되는 단위
● COM 클라이언트
- COM 서버가 인터페이스를 통해 제공하는 메서드를 호출함으로써 COM 서버의 기능을 이용하는 소프트웨어
● GUID, CLSID, IID
GUID(Globally Unique Identifer)
- GUID는 128비트(16바이트)의 크기를 갖는 구조체로서 전세계적으로 시간과 장소에 관계없이
고유하다고 보장할 수 있는 값을 나타내는 식별자이다.
- UUID(Universally Unique Identifier)라고도 불린다.
IID(Interface Identifier)
- 인터페이스의 GUID
CLSID(Class Identifier)
- COM 객체의 GUID
● HRESULT
- COM에서 사용되는 함수의 대부분의 반환형
- HRESULT를 반환하는 것은 호출한 함수가 제대로 실행되었는지 쉽게 알 수 있도록 해주는 방법으로 널리 쓰임.
● COM 라이브러리
- COM과 관련해서 운영체제에서 지원되는 일련의 서비스들을 말함.
●IClassFactory
IUnknown 인터페이스와 마찬가지로 컴포넌트가 반드시 제공해야 하는 인터페이스다. 컴포넌트를 만드는 일을 한다.
CoCreateInstance API를 호출하면 실질적으로 컴포넌트를 직접 생성하는 것이 아니라 IClassFactory 인터페이스를
얻은 다음에 이것을 이용해서 컴포넌트를 생성한다.
[출처] C++와 COM 프로그래밍|작성자 빌게이츠
'★─Programing > ☆─API | MFC' 카테고리의 다른 글
[API/MFC] SetWindowPos() 함수 (0) | 2011.11.01 |
---|---|
[API/MFC] Excel automation 2007 (0) | 2011.11.01 |
[API/MFC] AfxMessageBox 타이틀 변경하기 (0) | 2011.07.20 |
[API/MFC] 다이얼로그에서 static text의 배경을 투명하게 하기 (0) | 2011.07.20 |
[API/MFC] 다이얼로그 사이즈 조정하기 (0) | 2011.07.20 |