- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在“ native 子系统”的 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
);
}
和cpp文件代码:
#include "main.h"
PVOID mainHeapHandle = NULL;
void InitAPSupportLibrary()
{
mainHeapHandle = RtlCreateHeap(HEAP_GROWABLE,NULL,0,0,NULL,0);
}
void FinishAPSupportLibrary()
{
if(mainHeapHandle) RtlDestroyHeap(mainHeapHandle);
}
void* mg_malloc(unsigned int size)
{
if(!mainHeapHandle)
InitAPSupportLibrary();
void *buf = RtlAllocateHeap(mainHeapHandle,HEAP_ZERO_MEMORY,size);
return buf;
}
int mg_free(void *buffer)
{
if (!mainHeapHandle) return 0;
return RtlFreeHeap(mainHeapHandle,0,buffer)?1:0;
}
void* operator new(size_t sz)
{
void* p = (void*)mg_malloc(sz);
return p;
}
void operator delete(void* p)
{
mg_free(p);
}
错误是: error C2373: 'operator new' : 重新定义;不同的类型修饰符 error C2373: 'operator delete' : 重新定义;不同的类型修饰符
谢谢你的帮助
最佳答案
如果你查看编译器的 <new>
header ,operator delete
的声明看起来像这样:
void __CRTDECL operator delete(void *) _THROW0();
如果宏__CRTDECL
扩展成除了什么都没有的东西(但可能是 __cdecl
),你可能与你的声明不匹配。
类似于 operator new
.
关于c++ - WDK 新增的重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397826/
我正在尝试在 C 代码中定义一个 double 据类型变量,该变量将在 Windows 内核中使用。代码可以编译,但在链接时出错。我尝试在源文件中使用 libcntpr.lib 并在代码中定义 __f
我正在尝试在 C 代码中定义一个 double 据类型变量,该变量将在 Windows 内核中使用。代码可以编译,但在链接时出错。我尝试在源文件中使用 libcntpr.lib 并在代码中定义 __f
我正在编译一个出现错误的程序,因为 winnt.h 和 ntstatus.h 都包含在 WDK 中。我用预处理编译成一个文件,发现了这个: #line 1 "C:\\Program Files (x8
我正在使用 native 子系统构建代码,但我遇到了 operator new 和 delete 的问题。我想使用 WDK new 和 delete 但出现以下错误: : error LNK2019:
我在“ native 子系统”的 wdk 中构建一个简单的代码我有一个重载 new 和 delete 运算符的库这是代码: #include #define HEAP_ZERO_MEM
我对使用 WDK 和 Visual Studio 的驱动程序还比较陌生。 当我在 Debug模式下编译项目时,我没有收到任何警告或错误,并且项目可以正常编译和运行。但是,当我在 Release模式下编
如何将汇编文件编译并链接到驱动程序构建中。 澄清一点 源文件: TARGETTYPE=DRIVER DRIVERTYPE=WDM TARGETPATH=obj TARGETNAME=bla INCLU
我对驱动程序开发还很陌生,但我目前在主机和目标计算机上都使用最新版本的 Visual Studio 和 Windows 10。我正在尝试为我的目标计算机设置配置,以便我可以测试我制作的驱动程序!但是,
我正在尝试设置自动驱动程序部署和调试,以测试来自 Visual Studio 2013 的 win 8.1 驱动程序。 主机:赢7VS2013 目标机器:赢8.1 我的主机设置了 2 个网卡,1 个连
我正在使用 Windows Driver Kit (WinDDK 6001.18001) 来构建我的用户空间应用程序,而不是 Visual Studio 2005。我采用这种方法是因为我们还必须构建驱
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试使用 WDK 构建环境构建 C++ 文件,并尝试在 DebugView 工具中查看输出。所以,当我尝试 windows 方法 OutputDebugString(L"Inside the m
我需要从 WDK 示例中调用 DbgPrint 或 KdPrint 函数 src\print\monitors\localmon 请帮忙指点 我刚刚添加 #include 在 localmon.c 文
我在启动内核模式驱动程序时遇到了一个烦人的错误。目前我正在使用一项服务来“按需”启动驱动程序。驱动程序已加载但立即失败并出现蓝屏。 驱动的代码很简单: #include NTSTATUS Drive
我昨天为我的 Visual Studio 2015 Enterprise 安装了 WDK 10。今天尝试做一个项目,但是首先找不到包含目录,所以我手动添加了它(C:\Program Files (x8
我正在 Windows Filtering Platform 中开发驱动程序,我需要另一个进程的进程 ID 来执行我需要执行的操作。我只知道该进程的文件名(name.exe)。 在 win32 中,我
我正在使用 WDK 的 Build 实用程序构建打印机驱动程序。我需要关闭“将警告视为错误”。它在 Visual Studio 项目文件中被关闭,但这显然不会影响 Build。 有谁知道如何做到这一点
我正在尝试从 Github ( https://github.com/Microsoft/Windows-driver-samples/tree/97cf8edcaddff4fdbc5cc48d56b
我正在编译一个普通的 C++ 文件Temp.cpp: #include int main() { std::wstring s; } 使用命令行: cl.exe /MD /Iinc\api\crt\
我一直在使用 WDK 10,并将 rpcrt4.lib 添加到链接器中。我的驱动程序已成功构建。当我尝试使用命令 net start mydriver 运行驱动程序时。我收到系统错误 2 消息。我尝试
我是一名优秀的程序员,十分优秀!