C++ 使用WDK重载运算符new
我正在“本机子系统”中用wdk构建一个简单的代码 我有一个重载new和delete操作符的库 代码如下:C++ 使用WDK重载运算符new,c++,wdk,C++,Wdk,我正在“本机子系统”中用wdk构建一个简单的代码 我有一个重载new和delete操作符的库 代码如下: #include<ntddk.h> #define HEAP_ZERO_MEMORY 0x00000008 #define HEAP_GROWABLE 0x00000002 typedef NTSTATUS (NTAPI * PRTL_HEAP_COMMIT_ROUTINE)( IN PVOID Ba
#include<ntddk.h>
#define HEAP_ZERO_MEMORY 0x00000008
#define HEAP_GROWABLE 0x00000002
typedef NTSTATUS
(NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
IN PVOID Base,
IN OUT PVOID *CommitAddress,
IN OUT PSIZE_T CommitSize
);
typedef struct _RTL_HEAP_PARAMETERS {
ULONG Length;
SIZE_T SegmentReserve;
SIZE_T SegmentCommit;
SIZE_T DeCommitFreeBlockThreshold;
SIZE_T DeCommitTotalFreeThreshold;
SIZE_T MaximumAllocationSize;
SIZE_T VirtualMemoryThreshold;
SIZE_T InitialCommit;
SIZE_T InitialReserve;
PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
SIZE_T Reserved[ 2 ];
} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
void* operator new(size_t sz);
void operator delete(void* p);
void* mg_malloc(unsigned int size);
int mg_free(void *buffer);
void InitAPSupportLibrary();
void FinishAPSupportLibrary();
extern "C"
{
PVOID RtlAllocateHeap(
__in PVOID HeapHandle,
__in_opt ULONG Flags,
__in SIZE_T Size
);
BOOLEAN RtlFreeHeap(
__in PVOID HeapHandle,
__in_opt ULONG Flags,
__in PVOID HeapBase
);
PVOID
RtlCreateHeap(
IN ULONG Flags,
IN PVOID Base ,
IN ULONG Reserve ,
IN ULONG Commit,
IN BOOLEAN Lock ,
IN PRTL_HEAP_PARAMETERS RtlHeapParams );
PVOID RtlDestroyHeap(
__in PVOID HeapHandle
);
}
错误是:
错误C2373:“运算符新建”:重新定义;不同类型的修饰语
错误C2373:“运算符删除”:重新定义;不同类型的修饰语
感谢您的帮助如果查看编译器的
标题,则运算符删除的声明如下所示:
void __CRTDECL operator delete(void *) _THROW0();
如果宏\uuuu CRTDECL
扩展为除零以外的其他内容(但可能是\uuu cdecl
),则可能与声明不匹配
类似于操作员新建
谢谢您的回复,但我正在寻找另一种解决方案。不使用这些调用约定问题在于,某些代码显然可以同时看到
中的运算符和代码中的运算符。编译器不喜欢它们在调用约定方面存在差异,因为这样它就不知道如何调用它们。
void __CRTDECL operator delete(void *) _THROW0();