На этом шаге мы рассмотрим реализацию методов компонента.
Теперь, реализовав свойство 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-компонента.