관리 메뉴

드럼치는 프로그래머

[API/MFC] C++와 COM 프로그래밍 본문

★─Programing/☆─API | MFC

[API/MFC] C++와 COM 프로그래밍

드럼치는한동이 2011. 11. 1. 10:41

1. 모바일 플렛폼과 종류

모바일 플랫폼이란 표준규격에 따라 작성된 응용프로그램을 실행시킬 수 있는 단말기 실행환경을 말한다.

예를들어, DirectX라는 윈도우 환경의 게임 개발 환경을 들 수 있다. Windows라는 운영체제에서 DirectX API(Application Program Interface)를 사용해서 작성된 응용 프로그램이 있다면, DirectX에서 사용된 APIOS에서 지원하는 특정 함수를 사용해서 구현을 하였고, 윈도우에서 지원하는 함수는 단순한 맵핑의

기능을 지원한다.

다시말하면, 모바일 플랫폼이란 단말 응용프로그램에 사용한 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 인터페이스를

얻은 다음에 이것을 이용해서 컴포넌트를 생성한다.


Comments