Changeset 391 for python/trunk/PC/dl_nt.c
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/PC/dl_nt.c
r2 r391 4 4 5 5 About the only reason for having this, is so initall() can automatically 6 be called, removing that burden (and possible source of frustration if 6 be called, removing that burden (and possible source of frustration if 7 7 forgotten) from the programmer. 8 8 … … 47 47 void _LoadActCtxPointers() 48 48 { 49 50 51 52 53 54 55 56 57 58 49 HINSTANCE hKernel32 = GetModuleHandleW(L"kernel32.dll"); 50 if (hKernel32) 51 pfnGetCurrentActCtx = (PFN_GETCURRENTACTCTX) GetProcAddress(hKernel32, "GetCurrentActCtx"); 52 // If we can't load GetCurrentActCtx (ie, pre XP) , don't bother with the rest. 53 if (pfnGetCurrentActCtx) { 54 pfnActivateActCtx = (PFN_ACTIVATEACTCTX) GetProcAddress(hKernel32, "ActivateActCtx"); 55 pfnDeactivateActCtx = (PFN_DEACTIVATEACTCTX) GetProcAddress(hKernel32, "DeactivateActCtx"); 56 pfnAddRefActCtx = (PFN_ADDREFACTCTX) GetProcAddress(hKernel32, "AddRefActCtx"); 57 pfnReleaseActCtx = (PFN_RELEASEACTCTX) GetProcAddress(hKernel32, "ReleaseActCtx"); 58 } 59 59 } 60 60 61 61 ULONG_PTR _Py_ActivateActCtx() 62 62 { 63 64 65 66 67 68 69 63 ULONG_PTR ret = 0; 64 if (PyWin_DLLhActivationContext && pfnActivateActCtx) 65 if (!(*pfnActivateActCtx)(PyWin_DLLhActivationContext, &ret)) { 66 OutputDebugString("Python failed to activate the activation context before loading a DLL\n"); 67 ret = 0; // no promise the failing function didn't change it! 68 } 69 return ret; 70 70 } 71 71 72 72 void _Py_DeactivateActCtx(ULONG_PTR cookie) 73 73 { 74 75 76 74 if (cookie && pfnDeactivateActCtx) 75 if (!(*pfnDeactivateActCtx)(0, cookie)) 76 OutputDebugString("Python failed to de-activate the activation context\n"); 77 77 } 78 78 79 BOOL WINAPI DllMain (HANDLE hInst,80 81 79 BOOL WINAPI DllMain (HANDLE hInst, 80 ULONG ul_reason_for_call, 81 LPVOID lpReserved) 82 82 { 83 84 85 86 87 88 83 switch (ul_reason_for_call) 84 { 85 case DLL_PROCESS_ATTACH: 86 PyWin_DLLhModule = hInst; 87 // 1000 is a magic number I picked out of the air. Could do with a #define, I spose... 88 LoadString(hInst, 1000, dllVersionBuffer, sizeof(dllVersionBuffer)); 89 89 90 91 92 93 94 95 96 90 // and capture our activation context for use when loading extensions. 91 _LoadActCtxPointers(); 92 if (pfnGetCurrentActCtx && pfnAddRefActCtx) 93 if ((*pfnGetCurrentActCtx)(&PyWin_DLLhActivationContext)) 94 if (!(*pfnAddRefActCtx)(PyWin_DLLhActivationContext)) 95 OutputDebugString("Python failed to load the default activation context\n"); 96 break; 97 97 98 99 100 101 102 103 98 case DLL_PROCESS_DETACH: 99 if (pfnReleaseActCtx) 100 (*pfnReleaseActCtx)(PyWin_DLLhActivationContext); 101 break; 102 } 103 return TRUE; 104 104 } 105 105
Note:
See TracChangeset
for help on using the changeset viewer.