Использование макросов COM
STDMETHODIMP_(ULONG) CoSayFactory::AddRef() { return ++m_ref; } STDMETHODIMP_(ULONG) CoSayFactory::Release() { if (--m_ref==0) delete this; return m_ref; } //====== Методы IClassFactory STDMETHODIMP CoSayFactory::CreateInstance(LPUNKNOWN pUnk, REFIID riid, void** ppv) { // Этот параметр управляет аггрегированием объектов СОМ, // которое мы не поддерживаем if (pUnk) return CLASS_E_NOAGGREGATION; //=== Создание нового объекта и запрос его интерфейса CoSay *pSay = new CoSay; HRESULT hr = pSay › Query!nterface (riid, ppv); if (FAILED(hr)) delete pSay; return hr; } //=== Управление счетчиком фиксаций сервера в памяти STDMETHODIMP CoSayFactory::LockServer(BOOL bLock) { if (bLock) // Если TRUE, то увеличиваем счетчик ++gLockCount; else // Иначе – уменьшаем --gLockCount; return S_OK; }
Регистрация библиотеки типов
Библиотеку типов также надо регистрировать для того, чтобы клиент мог найти ее с помощью уникального идентификатора. Введите изменения в файл MyCom.reg в соответствии со схемой, приведенной ниже, но используя при этом ваши идентификаторы, файловые адреса и помня о правилах переноса. Сохраните исправления и зарегистрируйте все перечисленные объекты, дважды щелкнув на файле MyCom.reg в окне Windows File Manager:
REGEDIT HKEY_CLASSES_ROOT\MyComTLib.CoSay\CLSID = {9B865820-2FFA-lld5-98B4-OOE0293F01B2} HKEY_CLASSES_ROOT\CLSID\ {9B865820-2FFA-lld5-98B4-OOE0293F01B2} = MyComTLib.CoSay HKEY_CLASSES_ROOT\CLSID\ {9B865820-2FFA-lld5-98B4-OOE0293F01B2} \InprocServer32 = D:\My Projects\MyComTLib\Debug\MyComTLib.dll' HKEY_CLASSES_ROOT\CLSID\ {9B865820-2FFA-lld5-98B4-OOE0293F01B2}\TypeLib = {0934DA90-608D-4107-9ECC-C7E828AD0928} HKEY_CLASSES_ROOT\TypeLib\ {0934DA90-608D-4107-9ECC-C7E828AD0928} = MyComTLib HKEY_CLASSES_ROOT\TypeLib\ {0934DA90-608D-4107-9ECC-C7E828AD0928} \1.0\0\Win32 = D:\My Projects\MyComTLib\Debug\MyComTLib.tlb
После этого дайте команду Build › Rebuild Solution. При осуществлении компоновки (Linking) в окне Output должна появиться строка:
Creating library Debug/MyComTLib.lib and object Debug/MyComTLib.exp
Которая свидетельствует о том, что DEF-файл воспринят и участвует в построении проекта. Если вы не видите этой строки, то выполните шаги по настройке проекта, которые описаны выше в разделе "Файл описания DLL", и повторите процедуру построения. После этого сервер готов к использованию.