Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用WDK重载运算符new_C++_Wdk - Fatal编程技术网

C++ 使用WDK重载运算符new

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

我正在“本机子系统”中用wdk构建一个简单的代码 我有一个重载new和delete操作符的库 代码如下:



    #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();