Создание СОМ-компонентов средствами ATL. Реализация методов компонента

   
На этом шаге мы рассмотрим реализацию методов компонента.

   
Теперь, реализовав свойство Key, Вы можете добавлять код метода EncodeString().

  • Реализация метода EncodeString().
  • В меню View выберите команду Workspace и затем щелкните вкладку ClassView.
  • Нажмите знак "+" рядом с узлом CEncoder, чтобы раскрыть содержимое этого класса.
  • Нажмите знак "+" рядом с узлом IEncoder, чтобы раскрыть содержимое этого интерфейса.
    Рис.1. ClassView с методами интерфейса IEncoder
  • Дважды щелкните метод EncodeString(). Откроется окно редактирования
    тела функции EncodeString(), реализованного в файле Encoder.cpp.
  • Добавьте в тело EncodeString() код следующего вида:
    STDMETHODIMP CEncoder::EncodeString(const BSTR instring, BSTR *outstring)
    {
       BSTR tempstring = ::SysAllocString(instring);
       wcscpy(tempstring, instring);
       for(UINT i = 0; i < ::SysStringLen(tempstring); i++) 
          tempstring[i] += m_Key;
       *outstring = ::SysAllocString(tempstring); 
       ::SysFreeString(tempstring);
       return S_OK;
    }
    


    Рис.2. Функция EncodeString()

   
Для понимания приведенной выше функции Вам могут понадобься дополнительные знания о BSTR. BSTR - это по существу
указатель на строку Unicode-символов типа wchar_t. Здесь видно, как К-параметр передается
в стандартную библиотечную функцию wspy(). Однако BSTR не просто массив символов - в его
начале находится 4-байтовое целое число, указывающее на число байт в данной строке. А это значит, что Вы обязаны
выделить память для BSTR с помощыо Win32-функции SysAllocString(). В приведенном
ниже примере память для переменной типа BSTR выделяется на основе уже
существующей BSTR. Еще один способ выделения памяти для BSTR - на основе массива wchar_t, как показано ниже:

  wchar_t wszPeas[] = L"Visualize Whirled Peas"; 
  BSTR bstrPeas = ::SysAllocString(wszPeas);

   
Закончив работать с BSTR-переменной, освободите занимаем ею память, вызвав SysFreeString(). Обратите внимание, что в
нашем примере мы не освобождаем память, занятую переменной outstring, так как ее необходимо вернуть клиенту.
В СОМ освобождение ресурсов, выделенных сервером при выполнении запроса, входит в обязанности клиента.

   
Заметьте также, что EncodeString() обращается к функции SysStringLen() для определения длины (в символах) BSTR.

   
Теперь Вы можете приступать к сборке проекта Encode Server. После успешной компиляции и компоновки
Visual Studio самостоятельно зарегистрирует Ваш объект Encoder на локальной машине, сделав его
доступным приложениям-клиентам.

   
Текст этого приложения можно взять здесь (28,5 Кб).

   
Со следующего шага мы начнем более детально изучать код ATL COM-компонента.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий