Учебник по Visual C++ .Net


Библиотека типов Для того чтобы


"oaidl.idl";

import "ocidl.idl";

//====== Уточненное описание интерфейса ISay

[

object, uuid(170368DO-85BE-43af-AE71-053F506657A2) ,

helpstring("My Test DLL COM-server ISay")

]

interface ISay : lUnknown

{

HRESULT Say();

HRESULT SetWord([in]BSTR word);

}

//====== Описание библиотеки типов

[

uuid(0934DA90-608D-4107-9ECC-C7E828AD0928),

version(1.0),

helpstring("My Test DLL COM-server Type Library")

]

library MyCom {

importlib("stdole32.tlb") ;

[uuid(9B865820-2FFA-lld5-98B4-OOE0293F01B2)]

//====== Описание класса реализации интерфейса

coclass CoSay

{

[default] interface ISay; };

};

Попробуйте откомпилировать новый файл описания интерфейса, используя клавиатурную комбинацию Ctrl+F7. Если на этом этапе возникнут ошибки, то проверьте настройку проекта View > Property Pages > MIDL > General > MkTy ре Lib Compatible (она должна быть в состоянии No) и повторите компиляцию. После успешного ее завершения просмотрите содержимое папки проекта. В ней должны появиться новые файлы: MyComTLib_h.h, MyComTLibJ.c, MyComTLib_p.c и dlldata.c. Эти файлы, как было сказано, помогают обеспечить взаимодействие клиента с сервером. В результате их компиляции и сборки будет сгенерирована DLL, в которой реализованы коды заглушек proxy/stub.

  • MyComTLib_h.h содержит описания заглушек и интерфейса isay на двух языках: С и C++. Работа с указателями vtable в языке С ведется значительно более изощренным способом, чем в языке C++. В конце файла вы можете увидеть набор макросов, которые сгенерировал MIDL для упрощения этой задачи.

  • MyComTLibJ.c содержит идентификаторы интерфейса, его класса и библиотеки типов. Этот файл должен быть подключен к любому программному модулю, который обращается к нашему интерфейсу ISay.

  • MyComTLib_p.c содержит исходный код заглушек (proxy/stub) для интерфейса. Он, как вы помните, обеспечивает стандартный маршалинг параметров. Код достаточно замысловатый и малопонятный, но его никогда не надо корректировать.




    Начало  Назад  Вперед



    Книжный магазин