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



Файл описания DLL Для успешной


Для разработки минимального приложения, способного найти DLL COM inproc-сервер, можно начать с заготовки простого приложения консольного типа, инициализировать системные COM DLL и обратиться к ним с просьбой найти наш СОМ-объект и загрузить DLL в адресное пространство нашего процесса. Все это делается при вызове функции CoGetclassObject из семейства сом API. Обратите внимание на то, что нам не надо изменять настройки проекта (Project > Settings) и указывать компоновщику на необходимость подключения DLL, а также указывать ее локальный или сетевой адрес. Собственно, в этом и есть главная заслуга СОМ. Приложение-клиент можно перенести на другую машину, и если там зарегистрирован наш СОМ-объект, то он будет найден и правильно загружен. Функция CoGetclassObject одновременно с поиском и загрузкой DLL СОМ-серве-ра возвращает адрес запрошенного интерфейса. В нашем случае — это isay. Имея адрес интерфейса, можно обращаться к его методам, управляя, таким образом, объектом.

  • Создайте новый проект типа Win32 с именем SayClient.

  • На странице Application Settings выберите тип Console Application и флаг Empty project.

  • Добавьте в проект новый файл с именем SayClient.cpp.

  • Скопируйте из папки предыдущего проекта и вставьте в папку текущего проекта файл interfaces.h. Подключите его к проекту.

  • Введите в файл SayClient.cpp текст единственной функции main:

    #include

    "interfaces.h"

    void main ()

    {

    //====== Инциализация COM Library

    Colnitialize(0);

    //====== Сюда хотим записать адрес интерфейса

    ISay *pSay;

    // Пытаемся найти и загрузить СОМ DLL-сервер, а также

    // получить адрес вложенного интерфейса, указав

    // два уникальных идентификатора CLSID_CoSay и IID_ISay

    HRESULT hr = CoGetClassObject (CLSID_CoSay,

    CLSCTX_INPROC_SERVER, 0, IID_ISay, (void**)&pSay);

    if (FAILED(hr))

    {

    MessageBox(0,"Could not get class object!

    ", "CoGetClassObject",MB_OK);

    CoUninitialize();

    return;

    }

    //====== В случае успеха командуем объектом




    Содержание  Назад  Вперед