/
githubmirror
/
PowerToys
Обзор
Документация
Войти
/
githubmirror
/
PowerToys
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/common/utils/com_object_factory.h
62 строки
1 KB
Kai Tao
UT: Add ut to protect common utils codes (#45290)
03 фев 2026, 10:12
Не верифицирован
03 фев 2026, 10:12
27ba536
Код
Авторство
О чём код?
#pragma once #include <Unknwn.h> #include <winrt/base.h> #include <atomic> #include <shlwapi.h> template<typename T> class com_object_factory : public IClassFactory { public: HRESULT __stdcall QueryInterface(const IID& riid, void** ppv) override { static const QITAB qit[] = { QITABENT(com_object_factory, IClassFactory), { 0 } }; return QISearch(this, qit, riid, ppv); } ULONG __stdcall AddRef() override { return ++_refCount; } ULONG __stdcall Release() override { LONG refCount = --_refCount; return refCount; } HRESULT __stdcall CreateInstance(IUnknown* punkOuter, const IID& riid, void** ppv) { if (!ppv) { return E_POINTER; } *ppv = nullptr; if (punkOuter) { return CLASS_E_NOAGGREGATION; } T* psrm = new (std::nothrow) T(); HRESULT hr = psrm ? S_OK : E_OUTOFMEMORY; if (SUCCEEDED(hr)) { hr = psrm->QueryInterface(riid, ppv); psrm->Release(); } return hr; } HRESULT __stdcall LockServer(BOOL) { return S_OK; } private: std::atomic<long> _refCount; };