【VS问题已解决】警告被视为错误 - 没有生成“object”文件

本文介绍了Visual Studio中遇到警告被视为错误问题的原因及解决方法。通常由代码语法错误引起,如转义字符乱码等问题。提供了修改项目属性设置的方案,并强调此做法的安全隐患。同时分享了具体的代码修改实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【VS问题已解决】警告被视为错误 - 没有生成“object”文件

        目前遇到这个问题主要是因为代码存在不明显的语法错误。在VS生成解决方案的编译阶段之前会检查有没有明显的语法问题。首先是,例如缺少结尾分号、误用中文字符这种最明显问题,在运行之前就会有错误提示。其次还有,例如代码编写阶段类的继承关系错误的深层问题,这种问题会在编译过程中中断程序,因为功能本身就是不可能进行下去的。

        我们这里说的这个报错很接近第二种情况,网上有很多的博客提到通过修改项目属性中C/C++的常规部分设置,“将警告视为错误”这部分改为“否”。方法是可行的,我也试过。只是感觉这样的操作虽然最简单但是存在很大的安全隐患。在工程代码的发布版本中如果留下这个后门,之后自己还没有注意到,可能之后检查不出一些代码问题,也容易被他人利用。如果是自己用来学习或者做测试的demo,可能不用注意太多。我还是不建议用大多数人写到的这个解决办法。这里也感觉网上的大佬让我学到了很多,他举得例子也很形象(链接:https://blog.youkuaiyun.com/hurricane_0x01/article/details/51304907

        我遇到这个情况是运行了cef官网的一个例子,错误提示之后根绝报错信息找到了其中的错误是因为转义字符\n在本地导入之后出现了乱码。然后把这里改回来就好了。如果对于项目代码不熟悉,可能能不能把问题改回来还得看运气。

如果有原版可运行的代码,可以通过文本编辑器(如记事本,UltraEdit等)打开原代码文件,替换问题文件中的代码,避免自动导入后因为字符集不一致等问题导致的乱码。

       如果是遇到上面链接里的问题,需要修改一些语法的,就是打开错误列表,找到出现问题的那几行,进行相关修改。

例如后面出现了这个问题

代码写法严谨一些就解决了

bool result = false;
	result = manager->VisitUrlCookies
                   (url, includeHttpOnly,   new CookieVisitor(deleteCookies, callback));

具体情况还是得具体分析,有可能还有文章中没有提到的出错情况,欢迎大佬们补充

,从环境搭建到编写并测试HelloWDK驱动程序。首先介绍如何安装WDK,然后讲解如何在VS2019中创建和配置驱动项目,解决编译错误。最后,指导如何在虚拟机上测试驱动,包括启用驱动签名测试模式,安装并查看驱动运行效果和日志输出。摘要由优快云通过智能技术生成驱动的开发对于初学者来说是不友好的,我们不知道怎么入手,从哪里入门。对于初学者来说束手无策,特别是碰到一个很简单的问题,都不知道怎么解决,这一系列的教程,就是用来排除这些障碍。大部分的驱动开发教程都会先给我们把文档和demo给我们贴出来:Windows驱动程序入门: Windows 驱动程序入门 - Windows drivers | Microsoft DocsGithub: https://github.com/Microsoft/Windows-driver-samples但这对于初学者来说,一开始并没有什么用,因为看不懂。我们还是按照之前有一定的编程基础,来进入驱动的开发。假设大家已经安装了vs2019或者更高版本的vistual studio。先开发一个Hello World的驱动程序,把驱动程序安装到测试机上,看发生了什么。我们先不管里面的逻辑原理是什么,先依葫芦画瓢,整出第一个Hello World的demo。WDK(Windows Driver Kit) 安装安装WDK也是比较简单的事情,在Vistual studio Install上找到Windows Driver Kit ,进行安装,安装完成了以后会出现Windows Driver Kit已经打钩了。编写HelloWDK新建一个工程,选择Empty WDM Driver项目,新建driver.cpp文件,编写如下代码:// driver.cpp#include <ntddk.h>extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject);extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath){ DbgPrint("[GO2CODING_Driver] DriverEntry\n"); NTSTATUS status = STATUS_SUCCESS; pDriverObject->DriverUnload = DriverUnload; return status;}extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject){ DbgPrint("[GO2CODING_Driver] DriverUnload\n"); return;}123456789101112131415161718192021这时候编译会出错,error C2220: 以下警告视为错误warning C4100: “pRegPath”: 未引用的形参warning C4100: “pDriverObject: 未引用的形参123我们还需要如下的设置:1.配置属性 - C/C++ -常规 中 将警告视为错误 设置为 否2.配置属性 - Driver Signing - General 中 Sign Mode 设置为 Off。3 .配置属性 -Inf2cat - run Inf2cat 设置为 否。这样编译成功后,生成HelloWDM.inf和HelloWDM.sys文件。第一个demo也就完成了。测试虚拟机在做驱动的时候,并不像以前开发的应用程序那样,最好不要直接在本机上测试,我们需要一台windows 10 的虚拟机,虚拟机的安装方式可以参考相关的教程。我们还需要驱动开发的相关工具,包含DebugView,DriverMonitor,IRPTrace,WinObj,DeviceTree,DiskView,DriverManager,EzDriverInstaller,可以在这里进行下载。放到测试机上。测试机在正常的模式下,是无法安装windows没有签名的驱动,我们需要把测试机变为不需要签名验证。按shift重启测试机。进入这个界面,选择 疑难解答->启动设置->重启。重新进入系统,在如下的页面中按 7 启动windows。重启完后,把编译好的HelloWDK放到测试机上,进入设备管理(电脑右键->管理),添加过时硬件。一路下一步到底,直到出现 从磁盘安装,选择安装的路径到刚才拷贝的路径下。在安装驱动之前,我们先以管理员的身份打开debugview,在Capture选择如下,等待着log的输出。安装驱动,会 出现如下的提示,选择始终安装。提示安装完成。在设备管理上出现了,如下的新设备。同时在debugview下,我们可以看到如下的log。这个log对于我们来说,意义太重大了,说明我们不仅仅把驱动安装成功了,还打印出了日志,简直相当于调试了,我们的心安了不少。HelloWDK.inf的内容如下:;; The Win2K DDK documentation contains an excellent INF reference.;--------- Version Section ---------------------------------------------------[Version]Signature="$CHICAGO$"Provider=Go2Coding_DeviceDriverVer=11/1/2007,3.0.0.3; If device fits one of the standard classes, use the name and GUID here,; otherwise create your own device class and GUID as this example shows.Class=Go2CodingDeviceClassGUID={EF2962F0-0D55-4bff-B8AA-2221EE8A79B1}CatalogFile=HelloWDK.cat;--------- SourceDiskNames and SourceDiskFiles Section -----------------------; These sections identify source disks and files for installation. They are; shown here as an example, but commented out.[SourceDisksNames]1 = "HelloWDK",Disk1,,[SourceDisksFiles]HelloWDK.sys = 1,,;--------- ClassInstall/ClassInstall32 Section -------------------------------; Not necessary if using a standard class; 9X Style[ClassInstall]Addreg=Class_AddReg; NT Style[ClassInstall32]Addreg=Class_AddReg[Class_AddReg]HKR,,,,%DeviceClassName%HKR,,Icon,,"-5";--------- DestinationDirs Section -------------------------------------------[DestinationDirs]YouMark_Files_Driver = 10,System32\Drivers;--------- Manufacturer and Models Sections ----------------------------------[Manufacturer]%MfgName%=Mfg0,ntamd64[Mfg0]; PCI hardware Ids use the form; PCI\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd;改成你自己的ID%DeviceDesc%=YouMark_DDI, PCI\VEN_9899&DEV_9899;---------- DDInstall Sections -----------------------------------------------; --------- Windows 9X -----------------; Experimentation has shown that DDInstall root names greater than 19 characters; cause problems in Windows 98[Mfg0.ntamd64]%DeviceDesc%=YouMark_DDI, PCI\VEN_9899&DEV_9899[YouMark_DDI]CopyFiles=YouMark_Files_DriverAddReg=YouMark_9X_AddReg[YouMark_9X_AddReg]HKR,,DevLoader,,*ntkernHKR,,NTMPDriver,,DeviceIoControl.sysHKR, "Parameters", "BreakOnEntry", 0x00010001, 0; --------- Windows NT -----------------[YouMark_DDI.NT]CopyFiles=YouMark_Files_DriverAddReg=YouMark_NT_AddReg[YouMark_DDI.NT.Services]Addservice = HelloWDK, 0x00000002, YouMark_AddService[YouMark_AddService]DisplayName = %SvcDesc%ServiceType = 1 ; SERVICE_KERNEL_DRIVERStartType = 3 ; SERVICE_DEMAND_STARTErrorControl = 1 ; SERVICE_ERROR_NORMALServiceBinary = %10%\System32\Drivers\HelloWDK.sys[YouMark_NT_AddReg]HKLM, "System\CurrentControlSet\Services\HelloWDK\Parameters",\"BreakOnEntry", 0x00010001, 0; --------- Files (common) -------------[YouMark_Files_Driver]HelloWDK.sys;--------- Strings Section ---------------------------------------------------[Strings]ProviderName="Go2Coding."MfgName="Go2Coding Soft"DeviceDesc="Hello World HelloWDK!"DeviceClassName="Go2Coding_Device"SvcDesc="Go2Coding"123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113如果需要 demo的源代码,可以私信我。
最新发布
03-20
### 开发和测试 HelloWDK 驱动程序的流程 #### 工具准备 为了开发 Windows 驱动程序,需要安装以下工具和环境: - **Visual Studio 2019**: 提供集成开发环境 (IDE),用于编写和调试代码[^1]。 - **Windows Driver Kit (WDK)**: 包含开发驱动所需的工具、头文件和库文件[^2]。 #### 安装 Visual Studio 和 WDK 1. 下载并安装 Visual Studio 2019。确保在安装过程中选择“桌面开发 C++”工作负载,并勾选“Windows 驱动程序开发工具包 (WDK)”选项[^4]。 2. 如果已经安装了 Visual Studio 2019,则可以通过“Visual Studio Installer”添加 WDK 组件。 #### 创建驱动项目 1. 打开 Visual Studio 2019 并创建一个新的项目。 2. 在模板列表中选择“Kernel Mode Driver, Empty”,命名为 `HelloWDK`。 3. 添加必要的源代码文件(如 `.c`, `.h`),实现基本功能逻辑。 以下是简单的驱动代码示例: ```c #include <ntddk.h> NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { UNREFERENCED_PARAMETER(DriverObject); UNREFERENCED_PARAMETER(RegistryPath); KdPrint(("Hello, WDK!\n")); return STATUS_SUCCESS; } ``` 此代码会在加载驱动时打印一条消息到调试输出窗口。 #### 编译驱动程序 1. 使用命令提示符启动开发者工具:从开始菜单找到 `Developer Command Prompt for VS 2019` 并打开它[^3]。 2. 切换至项目的根目录,执行构建命令: ```cmd build -ceZ ``` 参数说明: - `-c`: 清理之前的构建结果。 - `-e`: 启用增量编译。 - `-Z`: 显示详细的构建日志。 如果遇到编译错误,请检查以下几点: - 是否正确安装了 WDK 及其依赖项。 -文件路径是否已配置好。 - 构建目标平台是否匹配(如 x86 或 x64)。 #### 设置虚拟机进行测试 1. 安装适用于 Windows 的虚拟化软件(如 VirtualBox 或 VMware Workstation Pro)。 2. 创建一个带有调试支持的操作系统镜像作为测试环境。 3. 配置主机与虚拟机之间的串口连接以便捕获调试信息。 ##### 调试步骤 1. 在 Visual Studio 中设置远程调试会话,指定目标设备为虚拟机实例。 2.生成的二进制文件部署到虚拟机上的适当位置。 3. 加载驱动并通过 WinDbg 查看实时日志输出。 通过上述方法可以完成整个开发周期——从初始化开发环境直到验证最终产物的行为表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值