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

Windows编程

开发平台:

Visual C++

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