На этом шаге мы рассмотрим особенности реализации методов компонента.
Файл Encoder.cpp содержит тело метода EncodeString(), созданного на 176 шаге.
#include "stdafx.h" #include "EncodeServer.h" #include "Encoder.h" STDMETHODIMP CEncoder::EncodeString(const BSTR instring, BSTR *outstring) { // TODO: Add your implementation code here 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; }
В этом коде есть несколько характерных особенностей, присущих технологии СОМ - они автоматически учтены в методе мастером Add Method to Interface Wizard.
В качестве типа возвращаемых данных в этом методе указан макрос STDMETHODIMP. Он находится в заголовочном файле BASETYPS.H:
RESULT export stdcall
Указав, что возвращаемое значение должно относиться к типу HRESULT, мы вынудили Add Method to Interface Wizard автоматически вставить строку кода, возвращающую константу S_OK. Это - встоенная константа, соответствующая формату структуры данных HRESULT и содержащая код успешного возврата.
На следующем шаге мы рассмотрим функции глобальной точки входа.