13 #include <thumbcache.h>
17 #define SZ_CLSID_BLENDTHUMBHANDLER L"{D45F043D-F17F-4e8a-8435-70971D9FA46D}"
18 #define SZ_BLENDTHUMBHANDLER L"Blender Thumbnail Handler"
20 0xd45f043d, 0xf17f, 0x4e8a, {0x84, 0x35, 0x70, 0x97, 0x1d, 0x9f, 0xa4, 0x6d}};
40 if (
dwReason == DLL_PROCESS_ATTACH) {
42 DisableThreadLibraryCalls(hInstance);
67 size_t cClassObjectInits,
72 HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
73 for (
size_t i = 0; i < cClassObjectInits; i++) {
74 if (clsid == *pClassObjectInits[i].pClsid) {
75 IClassFactory *pClassFactory =
new (std::nothrow)
77 hr = pClassFactory ? S_OK : E_OUTOFMEMORY;
79 hr = pClassFactory->QueryInterface(riid, ppv);
80 pClassFactory->Release();
97 static const QITAB qit[] = {QITABENT(
CClassFactory, IClassFactory), {0}};
98 return QISearch(
this, qit, riid, ppv);
103 return InterlockedIncrement(&_cRef);
108 long cRef = InterlockedDecrement(&_cRef);
118 return punkOuter ? CLASS_E_NOAGGREGATION : _pfnCreate(riid, ppv);
168 HRESULT hr = HRESULT_FROM_WIN32(RegCreateKeyExW(pRegistryEntry->
hkeyRoot,
172 REG_OPTION_NON_VOLATILE,
181 BYTE *lpData = (LPBYTE)pRegistryEntry->
pszData;
184 size = ((DWORD)wcslen(pRegistryEntry->
pszData) + 1) *
sizeof(WCHAR);
187 size =
sizeof(DWORD);
189 lpData = (BYTE *)&
data;
195 hr = HRESULT_FROM_WIN32(RegSetValueExW(
209 WCHAR szModuleName[MAX_PATH];
211 if (!GetModuleFileNameW(
g_hInst, szModuleName, ARRAYSIZE(szModuleName))) {
212 hr = HRESULT_FROM_WIN32(GetLastError());
233 L"Software\\Classes\\.blend\\",
239 L"Software\\Classes\\.blend\\ShellEx\\{e357fccd-a995-4576-b01f-234630154e96}",
246 for (
int i = 0; i < ARRAYSIZE(rgRegistryEntries) && SUCCEEDED(hr); i++) {
254 SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,
nullptr,
nullptr);
266 const PCWSTR rgpszKeys[] = {
268 L"Software\\Classes\\.blend\\ShellEx\\{e357fccd-a995-4576-b01f-234630154e96}"};
271 for (
int i = 0; i < ARRAYSIZE(rgpszKeys) && SUCCEEDED(hr); i++) {
272 hr = HRESULT_FROM_WIN32(RegDeleteTreeW(HKEY_CURRENT_USER, rgpszKeys[i]));
273 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