2 #include "ClassFactory.h"
\r
3 #include "ContextMenu.h"
\r
5 const CLSID CLSID_ContextMenuSample = {0x112143a6, 0x62c1, 0x4478, {0x9e, 0x8f, 0x87, 0x26, 0x99, 0x25, 0x5e, 0x2e}};
\r
7 HINSTANCE g_hinstDll = NULL;
\r
9 void MyLoadString(std::wstring& str,UINT id)
\r
11 const int incriment = 256;
\r
12 int length = incriment;
\r
16 text = (LPWSTR)_malloca(length * 2);
\r
17 int result = ::LoadString(g_hinstDll,id,text,length);
\r
19 throw "Not Found Resource";
\r
20 else if(result < length)
\r
27 length += incriment;
\r
31 void GetModulePath(WCHAR szOutput[],int length)
\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
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
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
49 //
\83G
\83\89\81[
\8f\88\97\9d\82È
\82Ç(
\8fÈ
\97ª)
\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
55 StringCbPrintf(szOutput,length,L"%s%s",szDrive,szDir);
\r
58 void LockModule(BOOL bLock)
\r
61 InterlockedIncrement(&g_lLocks);
\r
63 InterlockedDecrement(&g_lLocks);
\r
66 STDAPI DllCanUnloadNow()
\r
68 return g_lLocks == 0 ? S_OK : S_FALSE;
\r
71 STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
\r
73 static CClassFactory serverFactory;
\r
78 if (IsEqualCLSID(rclsid, CLSID_ContextMenuSample))
\r
79 hr = serverFactory.QueryInterface(riid, ppv);
\r
81 hr = CLASS_E_CLASSNOTAVAILABLE;
\r
86 STDAPI DllRegisterServer(void)
\r
91 STDAPI DllUnregisterServer(void)
\r
96 BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpReserved)
\r
100 case DLL_PROCESS_ATTACH:
\r
101 g_hinstDll = hinstDll;
\r
102 DisableThreadLibraryCalls(hinstDll);
\r