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

Рис.1. ClassView с методами интерфейса IEncoder
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-компонента.