7 * The following is just the necessary infrastructure for having a .dll
8 * which can be registered as a COM object.
11 HRESULT PASCAL
DllGetClassObject(REFCLSID obj_guid
, REFIID factory_guid
,
12 void **factory_handle
)
14 if (IsEqualCLSID(obj_guid
, &CLSID_git_shell_ext
) ||
15 IsEqualCLSID(obj_guid
, &CLSID_git_menu
))
16 return class_factory_query_interface(&factory
,
17 factory_guid
, factory_handle
);
20 return CLASS_E_CLASSNOTAVAILABLE
;
23 HRESULT PASCAL
DllCanUnloadNow(void)
25 return (object_count
|| lock_count
) ? S_FALSE
: S_OK
;
28 HRESULT PASCAL
DllRegisterServer(void)
30 char module
[MAX_PATH
];
31 wchar_t module_name
[MAX_PATH
];
32 ITypeLib
*typelib
= NULL
;
34 GetModuleFileName(NULL
, module
, MAX_PATH
);
35 MultiByteToWideChar(CP_ACP
, 0, module
, -1, module_name
, MAX_PATH
);
36 if (LoadTypeLib(module_name
, &typelib
) == S_OK
) {
37 HRESULT result
= RegisterTypeLib(typelib
, module_name
, NULL
);
38 typelib
->lpVtbl
->Release(typelib
);
44 HRESULT PASCAL
DllUnregisterServer(void)
49 BOOL WINAPI
DllMain(HINSTANCE instance
, DWORD reason
, LPVOID reserved
)
51 if (reason
== DLL_PROCESS_ATTACH
) {
52 object_count
= lock_count
= 0;
53 DisableThreadLibraryCalls(instance
);