Помочь она может удобно использовать 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++. Посмотрите в глобальном пространстве.
В свою очередь эти имена берутся от имен классов в DLL.
Ну, а приставка Ptr добавляется автоматически. Как видите поддержка COM объектов реализована очень приятно. Все происходит за пределами видимости программиста. Константа CLSCTX_ALL отвечает за контекст выполнения.
#define CLSCTX_ALL (CLSCTX_INPROC_HANDLER | CLSCTX_SERVER)
Подробнее смотрите в "Шаг 93 - Разница удаленного COM EXE и COM DLL".