Шаг 95 -Чем нам может помочь директива Import

Помочь она может удобно использовать COM объекты. Вы знаете, что для использования COM объектов нам нужны описания интерфейсов. Вот импорт в этом может и помочь. Очень просто и удобно использовать COM объекты в Ваших программах. Итак, я для тестирования создал простой COM объект на основе Atl Com Wizard. И реализовал в нем всего один интерфейс:

STDMETHODIMP CCTestDll::MessageMi()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())
	MessageBox(0,"Hello","Test",MB_OK);
	return S_OK;
} 

Потом создал программу которая будет использовать этот объект и используя директиву Import сделал ссылку на DLL, в которой находиться COM.

#include "stdafx.h"
#include "ole2.h"
#import "D:\VС\TestDll\Debug\TestDll.dll"

void main()
{
	CoInitialize(NULL); 
	using namespace TESTDLLLib;
	ICTestDllPtr Itest(__uuidof(CTestDll),NULL, CLSCTX_ALL);
	Itest->MessageMi();
	Itest=NULL; 
	CoUninitialize();
}

Самое главное откуда и что берется. using namespace TESTDLLLib говорит о использовании пространства имен объекта COM. Имя формируется так. TestDll приводиться к верхнему регистру и становиться TESTDLL потом у нему прибавляется Lib и получается имя пространства имен TESTDLLLib. Для другого объекта так же формируется:

В Верхний регистр
+ Lib

Откуда взялось ICTestDllPtr а оно извлекается VC++. Посмотрите в глобальном пространстве.

95_1.gif (3953 b)

В свою очередь эти имена берутся от имен классов в DLL.

95_2.gif (1706 b)

Ну, а приставка Ptr добавляется автоматически. Как видите поддержка COM объектов реализована очень приятно. Все происходит за пределами видимости программиста. Константа CLSCTX_ALL отвечает за контекст выполнения.

#define CLSCTX_ALL (CLSCTX_INPROC_HANDLER | CLSCTX_SERVER)

Подробнее смотрите в "Шаг 93 - Разница удаленного COM EXE и COM DLL".


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 24.08.2001