15#include <thumbcache.h>
19#define SZ_CLSID_BLENDTHUMBHANDLER L"{D45F043D-F17F-4e8a-8435-70971D9FA46D}"
20#define SZ_BLENDTHUMBHANDLER L"Blender Thumbnail Handler"
22 0xd45f043d, 0xf17f, 0x4e8a, {0x84, 0x35, 0x70, 0x97, 0x1d, 0x9f, 0xa4, 0x6d}};
42 if (
dwReason == DLL_PROCESS_ATTACH) {
44 DisableThreadLibraryCalls(hInstance);
69 size_t cClassObjectInits,
74 HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
75 for (
size_t i = 0; i < cClassObjectInits; i++) {
76 if (clsid == *pClassObjectInits[i].pClsid) {
77 IClassFactory *pClassFactory =
new (std::nothrow)
79 hr = pClassFactory ? S_OK : E_OUTOFMEMORY;
81 hr = pClassFactory->QueryInterface(riid, ppv);
82 pClassFactory->Release();
99 static const QITAB qit[] = {QITABENT(
CClassFactory, IClassFactory), {0}};
100 return QISearch(
this, qit, riid, ppv);
105 return InterlockedIncrement(&_cRef);
110 long cRef = InterlockedDecrement(&_cRef);
120 return punkOuter ? CLASS_E_NOAGGREGATION : _pfnCreate(riid, ppv);
170 HRESULT hr = HRESULT_FROM_WIN32(RegCreateKeyExW(pRegistryEntry->
hkeyRoot,
174 REG_OPTION_NON_VOLATILE,
183 BYTE *lpData = (LPBYTE)pRegistryEntry->
pszData;
186 size = ((DWORD)wcslen(pRegistryEntry->
pszData) + 1) *
sizeof(WCHAR);
189 size =
sizeof(DWORD);
190 data = pRegistryEntry->
dwData;
191 lpData = (BYTE *)&data;
197 hr = HRESULT_FROM_WIN32(RegSetValueExW(
211 WCHAR szModuleName[MAX_PATH];
213 if (!GetModuleFileNameW(
g_hInst, szModuleName, ARRAYSIZE(szModuleName))) {
214 hr = HRESULT_FROM_WIN32(GetLastError());
235 L"Software\\Classes\\.blend\\",
241 L"Software\\Classes\\.blend\\ShellEx\\{e357fccd-a995-4576-b01f-234630154e96}",
248 for (
int i = 0; i < ARRAYSIZE(rgRegistryEntries) && SUCCEEDED(hr); i++) {
256 SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,
nullptr,
nullptr);
268 const PCWSTR rgpszKeys[] = {
270 L"Software\\Classes\\.blend\\ShellEx\\{e357fccd-a995-4576-b01f-234630154e96}"};
273 for (
int i = 0; i < ARRAYSIZE(rgpszKeys) && SUCCEEDED(hr); i++) {
274 hr = HRESULT_FROM_WIN32(RegDeleteTreeW(HKEY_CURRENT_USER, rgpszKeys[i]));
275 if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) {
#define SZ_CLSID_BLENDTHUMBHANDLER
#define SZ_BLENDTHUMBHANDLER
STDAPI DllRegisterServer()
STDAPI DllUnregisterServer()
const CLASS_OBJECT_INIT c_rgClassObjectInit[]
HRESULT CreateRegKeyAndSetValue(const REGISTRY_ENTRY *pRegistryEntry)
STDAPI DllGetClassObject(REFCLSID clsid, REFIID riid, void **ppv)
DWORD void *STDAPI DllCanUnloadNow()
const CLSID CLSID_BlendThumbHandler
STDAPI_(BOOL) DllMain(HINSTANCE hInstance
HRESULT CBlendThumb_CreateInstance(REFIID riid, void **ppv)
HRESULT(* PFNCREATEINSTANCE)(REFIID riid, void **ppvObject)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
IFACEMETHODIMP LockServer(BOOL fLock)
IFACEMETHODIMP_(ULONG) AddRef()
IFACEMETHODIMP_(ULONG) Release()
IFACEMETHODIMP CreateInstance(IUnknown *punkOuter, REFIID riid, void **ppv)
IFACEMETHODIMP QueryInterface(REFIID riid, void **ppv)
static HRESULT CreateInstance(REFCLSID clsid, const CLASS_OBJECT_INIT *pClassObjectInits, size_t cClassObjectInits, REFIID riid, void **ppv)
CClassFactory(PFNCREATEINSTANCE pfnCreate)
PFNCREATEINSTANCE pfnCreate