OSDN Git Service

ビルド時に警告が出ないようにした
[completeeraser/CompleteEraser.git] / ShellExtension / DllMain.cpp
1 #include "DllMain.h"\r
2 #include "ClassFactory.h"\r
3 #include "ContextMenu.h"\r
4 \r
5 const CLSID CLSID_ContextMenuSample = {0x112143a6, 0x62c1, 0x4478, {0x9e, 0x8f, 0x87, 0x26, 0x99, 0x25, 0x5e, 0x2e}};\r
6 LONG      g_lLocks = 0;\r
7 HINSTANCE g_hinstDll = NULL;\r
8 \r
9 void MyLoadString(std::wstring& str,UINT id)\r
10 {\r
11         const int incriment = 256;\r
12         int length = incriment;\r
13         LPWSTR text;\r
14         for(;;)\r
15         {\r
16                 text = (LPWSTR)_malloca(length * 2);\r
17                 int result = ::LoadString(g_hinstDll,id,text,length);\r
18                 if(result == 0)\r
19                         throw "Not Found Resource";\r
20                 else if(result < length)\r
21                 {\r
22                         str = text;\r
23                         _freea(text);\r
24                         break;\r
25                 }\r
26                 _freea(text);\r
27                 length += incriment;\r
28         }\r
29 }\r
30 \r
31 void GetModulePath(WCHAR szOutput[],int length)\r
32 {\r
33         WCHAR szPath[_MAX_PATH];\r
34         WCHAR szDrive[_MAX_DRIVE];\r
35         WCHAR szDir[_MAX_DIR];\r
36         WCHAR szFileName[_MAX_FNAME];\r
37         WCHAR szExt[_MAX_EXT];\r
38 \r
39         //\8f\89\8aú\89»\r
40         memset(szPath, 0x00, sizeof(szPath));\r
41         memset(szDrive, 0x00, sizeof(szDrive));\r
42         memset(szDir, 0x00, sizeof(szDir));\r
43         memset(szExt, 0x00, sizeof(szExt));\r
44         memset(szOutput, 0x00, sizeof(szOutput));\r
45         \r
46         //\8eÀ\8ds\92\86\82Ì\83v\83\8d\83Z\83X\82Ì\83t\83\8b\83p\83X\96¼\82ð\8eæ\93¾\82·\82é\r
47         DWORD dwRet = GetModuleFileName(g_hinstDll, szPath, sizeof(szPath));\r
48         if(dwRet == 0) {\r
49         //\83G\83\89\81[\8f\88\97\9d\82È\82Ç(\8fÈ\97ª)\r
50         }\r
51         \r
52         //\83t\83\8b\83p\83X\96¼\82ð\95ª\8a\84\82·\82é\r
53         _wsplitpath_s(szPath, szDrive,sizeof(szDrive), szDir,sizeof(szDir), szFileName,sizeof(szFileName), szExt,sizeof(szExt)); \r
54 \r
55         StringCbPrintf(szOutput,length,L"%s%s",szDrive,szDir);\r
56 }\r
57 \r
58 void LockModule(BOOL bLock)\r
59 {\r
60         if (bLock)\r
61                 InterlockedIncrement(&g_lLocks);\r
62         else\r
63                 InterlockedDecrement(&g_lLocks);\r
64 }\r
65 \r
66 STDAPI DllCanUnloadNow()\r
67 {\r
68         return g_lLocks == 0 ? S_OK : S_FALSE;\r
69 }\r
70 \r
71 STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)\r
72 {\r
73         static CClassFactory serverFactory;\r
74         HRESULT hr;\r
75 \r
76         *ppv  = NULL;\r
77         \r
78         if (IsEqualCLSID(rclsid, CLSID_ContextMenuSample))\r
79                 hr = serverFactory.QueryInterface(riid, ppv);\r
80         else\r
81                 hr = CLASS_E_CLASSNOTAVAILABLE;\r
82 \r
83         return hr;\r
84 }\r
85 \r
86 STDAPI DllRegisterServer(void)\r
87 {\r
88         return S_OK;\r
89 }\r
90 \r
91 STDAPI DllUnregisterServer(void)\r
92 {\r
93         return S_OK;\r
94 }\r
95 \r
96 BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpReserved)\r
97 {\r
98         switch (dwReason) {\r
99 \r
100         case DLL_PROCESS_ATTACH:\r
101                 g_hinstDll = hinstDll;\r
102                 DisableThreadLibraryCalls(hinstDll);\r
103                 return TRUE;\r
104 \r
105         }\r
106 \r
107         return TRUE;\r
108 }\r