21 #include <thumbcache.h>
25 #define SZ_CLSID_BLENDTHUMBHANDLER L"{D45F043D-F17F-4e8a-8435-70971D9FA46D}"
26 #define SZ_BLENDTHUMBHANDLER L"Blender Thumbnail Handler"
28 0xd45f043d, 0xf17f, 0x4e8a, {0x84, 0x35, 0x70, 0x97, 0x1d, 0x9f, 0xa4, 0x6d}};
48 if (
dwReason == DLL_PROCESS_ATTACH) {
50 DisableThreadLibraryCalls(hInstance);
75 size_t cClassObjectInits,
80 HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
81 for (
size_t i = 0; i < cClassObjectInits; i++) {
82 if (clsid == *pClassObjectInits[i].pClsid) {
83 IClassFactory *pClassFactory =
new (std::nothrow)
85 hr = pClassFactory ? S_OK : E_OUTOFMEMORY;
87 hr = pClassFactory->QueryInterface(riid, ppv);
88 pClassFactory->Release();
104 static const QITAB qit[] = {QITABENT(
CClassFactory, IClassFactory), {0}};
105 return QISearch(
this, qit, riid, ppv);
110 return InterlockedIncrement(&_cRef);
115 long cRef = InterlockedDecrement(&_cRef);
125 return punkOuter ? CLASS_E_NOAGGREGATION : _pfnCreate(riid, ppv);
171 HRESULT hr = HRESULT_FROM_WIN32(RegCreateKeyExW(pRegistryEntry->
hkeyRoot,
175 REG_OPTION_NON_VOLATILE,
184 BYTE *lpData = (LPBYTE)pRegistryEntry->
pszData;
187 size = ((DWORD)wcslen(pRegistryEntry->
pszData) + 1) *
sizeof(WCHAR);
190 size =
sizeof(DWORD);
192 lpData = (BYTE *)&
data;
198 hr = HRESULT_FROM_WIN32(RegSetValueExW(
212 WCHAR szModuleName[MAX_PATH];
214 if (!GetModuleFileNameW(
g_hInst, szModuleName, ARRAYSIZE(szModuleName))) {
215 hr = HRESULT_FROM_WIN32(GetLastError());
236 L"Software\\Classes\\.blend\\",
242 L"Software\\Classes\\.blend\\ShellEx\\{e357fccd-a995-4576-b01f-234630154e96}",
249 for (
int i = 0; i < ARRAYSIZE(rgRegistryEntries) && SUCCEEDED(hr); i++) {
257 SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,
NULL,
NULL);
269 const PCWSTR rgpszKeys[] = {
271 L"Software\\Classes\\.blend\\ShellEx\\{e357fccd-a995-4576-b01f-234630154e96}"};
274 for (
int i = 0; i < ARRAYSIZE(rgpszKeys) && SUCCEEDED(hr); i++) {
275 hr = HRESULT_FROM_WIN32(RegDeleteTreeW(HKEY_CURRENT_USER, rgpszKeys[i]));
276 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