stoneage8.5/石器时代8.5客户端最新源代码/石器源码/other/memdll.h
2020-06-23 15:27:59 +08:00

126 lines
4.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*-----------------------------------------------------------------------------
caryMemory_lib.h -- cary's Virtual memory 管理。
Waei(c) All rights reserved
author: 許百勝Cary Hsu, 2000.10.8
-----------------------------------------------------------------------------*/
#ifndef __MEMDLL
#define __MEMDLL
#define _MEM_LIB
#ifdef _MEM_LIB
#define MEMDLL_API
#else
#ifdef MEMDLL_EXPORTS
#define MEMDLL_API __declspec(dllexport)
#else
#define MEMDLL_API __declspec(dllimport)
#endif
#endif
//回傳的錯誤***************************************************************************************
#define ERROR_MEMORY_OK 0x00000000
#define ERROR_MEMORY_INITFAILED 0x00000001 //配置Handle陣列錯誤
#define ERROR_HEAP_NOT_ENOUGH 0x00000010
#define ERROR_HEAP_LIST_NOT_ENOUGH 0x00000020
//*************************************************************************************************
/* 初始化記憶體函式庫
return: ERROR_MEMORY_OK: 成功
ERROR_MEMORY_INITFAILED:初始化失敗 */
DWORD MemoryInit();
/* 釋放記憶體函式庫的記憶體 */
void MemoryRelease();
//*************************************************************************************************
/* 保留一大範圍的Virtual Memory並傳回Handle建議以page為單位(先配置1個commit page的記憶體)
parameter: lpdwHandle: 傳回Handle
iSize: 要配置多少記憶體,並回傳建立的大小
return: 非NULL: 回傳配置記憶體的位址
NULL: 失敗 */
MEMDLL_API LPVOID VirtualReserve( LPDWORD lpdwHandle, int &iSize);
/* 釋放此Handle配置的記憶體
parameter: lpdwHandle: Handle值 */
MEMDLL_API void VirtualRelease( LPDWORD lpdwHandle);
/* 發生Exception的處理函式
parameter: dwHandle: Handle值
lpEP: EXCEPTION_POINTERS的structure
return: EXCEPTION_CONTINUE_EXECUTION: 繼續執行
EXCEPTION_CONTINUE_SEARCH: 繼續尋找可處理exception handle */
MEMDLL_API int ExpFilter( DWORD dwHandle, LPEXCEPTION_POINTERS lpEP);
//*************************************************************************************************
//*************************************************************************************************
/* 配置iSize個記憶體當Heap
parameter: lpdwHandle: 傳回Handle
iSize: 要配置多少的記憶體
return: TRUE: 配置成功
FALSE: 失敗 */
MEMDLL_API BOOL HeapCreate( LPDWORD lpdwHandle, int &iSize);
/* 釋放Heap的所有記憶體
parameter: lpdwHandle: Handle值 */
MEMDLL_API void HeapRelease( LPDWORD lpdwHandle);
/* 清除Heap的List再使用
parameter: dwHandle: Handle值 */
MEMDLL_API void HeapReset( DWORD dwHandle);
/* 從lpheap中配置dwSize大小的記憶體
parameter: dwHandle: Handle值
dwSize: 要配置多少記憶體
return: 非NULL: 傳回配置的記憶體
NULL: 失敗 */
MEMDLL_API LPVOID HeapAlloc( DWORD dwHandle, DWORD dwSize);
/* 從lpheap中釋放掉Heap的memlt
parameter: dwHandle: Handle值
lpAddress: 要釋放的記憶體位址的位址 */
MEMDLL_API void HeapFree( DWORD dwHandle, LPVOID *lpAddress);
//*************************************************************************************************
//*************************************************************************************************
typedef struct USEDMEMORY{
LPBYTE lpbyStart;
DWORD dwSize;
}*LPUSEDMEMORY;
/* 取回lpheap的第一個Heap list
parameter: dwHandle: Handle值
return: 傳回使用中的addressNULL為最後一個 */
MEMDLL_API LPUSEDMEMORY GetMemoryListHead( DWORD dwHandle);
/* 取回lpheap的下一個Heap list
parameter: dwHandle: Handle值
return: 傳回使用中的addressNULL為最後一個 */
MEMDLL_API LPUSEDMEMORY GetMemoryListNext( DWORD dwHandle);
/* 取回錯誤值
parameter: dwHandle: Handle值
return: 回傳錯誤值 */
MEMDLL_API DWORD GetCaryError( DWORD dwHandle);
//*************************************************************************************************
//*************************************************************************************************
/* 搬移記憶體使用MMX做針對pentum II最佳化的處理
parameter: dest: 目的位址
src: 來源位址
cnt: 搬移的byte數
return: TRUE: 成功執行
FALSE: 位址不合法 */
MEMDLL_API BOOL mmx_CopyMemory( LPVOID dest, LPVOID src, int cnt);
/* 搬移記憶體使用MMX做針對pentum II最佳化的處理
parameter: dest: 目的位址
src: 來源位址
cnt: 搬移的byte數
return: TRUE: 成功執行
FALSE: 位址不合法 */
MEMDLL_API BOOL mmx_CopyMemory_test( LPVOID dest, LPVOID src, int cnt);
#endif