POOLMEM.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #ifndef POOLMEM_H
  2. #define POOLMEM_H
  3. #define STRICT
  4. #define LEAN_AND_MEAN
  5. #include <windows.h>
  6. #include <assert.h>
  7. #include <stdio.h>
  8. #include <mbstring.h>
  9. typedef LPVOID POOLHANDLE;
  10. #define POOLMEMORYBLOCKSIZE 8192
  11. POOLHANDLE WINAPI PoolMemInitPool ();
  12. VOID       WINAPI PoolMemDestroyPool (IN POOLHANDLE Handle);
  13. LPVOID     WINAPI PoolMemGetAlignedMemory(IN POOLHANDLE Handle, IN DWORD Size, IN DWORD AlignSize);
  14. #define PoolMemCreateString(h,x)        ((LPTSTR) PoolMemGetAlignedMemory((h),(x)*sizeof(TCHAR)))
  15. #define PoolMemCreateDword(h)           ((PDWORD) PoolMemGetMemory((h),sizeof(DWORD)))
  16. __inline
  17. LPVOID 
  18. PoolMemGetMemory (
  19.     IN POOLHANDLE Handle,
  20.     IN DWORD      Size
  21.     ) 
  22. {
  23.     return PoolMemGetAlignedMemory(Handle,Size,0);
  24. }
  25. __inline
  26. LPTSTR 
  27. PoolMemCreateStringA ( 
  28.     IN POOLHANDLE Handle,
  29.     IN DWORD      Size
  30.     ) 
  31. {
  32.     return (LPSTR) PoolMemGetAlignedMemory(Handle,Size * sizeof(CHAR),sizeof(CHAR));
  33. }
  34. __inline
  35. LPWSTR 
  36. PoolMemCreateStringW (
  37.     IN POOLHANDLE Handle,
  38.     IN DWORD      Size
  39.     ) 
  40. {
  41.     return (LPWSTR) PoolMemGetAlignedMemory(Handle,Size * sizeof(WCHAR),sizeof(WCHAR));
  42. }
  43. __inline
  44. PTSTR 
  45. PoolMemDuplicateStringA (
  46.     IN POOLHANDLE    Handle,
  47.     IN LPCSTR       StringToCopy
  48.     )
  49. {
  50.     
  51.     DWORD   stringLength;
  52.     PSTR    rString;
  53.     assert(StringToCopy);
  54.     stringLength = (DWORD) _mbschr(StringToCopy,0) - (DWORD) StringToCopy + 1;
  55.     rString      = PoolMemGetAlignedMemory(Handle,stringLength,sizeof(CHAR));
  56.     if (rString) {
  57.         _mbscpy(rString,StringToCopy);
  58.     }
  59.     return rString;
  60. }
  61. __inline
  62. PWSTR 
  63. PoolMemDuplicateStringW (
  64.     IN POOLHANDLE    Handle,
  65.     IN LPCWSTR       StringToCopy
  66.     )
  67. {
  68.     
  69.     DWORD    stringLength;
  70.     PWSTR    rString;
  71.     assert(StringToCopy);
  72.     stringLength = ((wcslen(StringToCopy)+1)*sizeof(WCHAR));
  73.     rString      = PoolMemGetAlignedMemory(Handle,stringLength,sizeof(WCHAR));
  74.     if (rString) {
  75.         wcscpy(rString,StringToCopy);
  76.     }
  77.     return rString;
  78. }
  79. #endif