VC常见问题(.obj : error LNK2019、fatal error C1083、编译64位Detours)
创始人
2024-05-31 15:21:49
0

VC常用问题

    • VC常见问题
      • *.obj : error LNK2019: 无法解析的外部符号 __imp_FindWindow ,该符号在函数 @@YA
    • Windows环境下用nmake编译常见问题
      • fatal error C1083: 无法打开包括文件:“excpt.h”
      • vs2012编译64位Detours(其他vs版本同理)
      • vs项目设置选项
      • 编译使用了Detours库的项目报错fatal error C1189


VC常见问题

*.obj : error LNK2019: 无法解析的外部符号 __imp_FindWindow ,该符号在函数 @@YA

解决方法1:#pragma comment(lib,"User32.lib")
解决方法2:项目属性、链接器、输入、附加依赖项,填写User32.lib即可。


Windows环境下用nmake编译常见问题

fatal error C1083: 无法打开包括文件:“excpt.h”

在编译Detours4.0的时候,nmake提示错误:
Windows Kits\8.0\include\um\windows.h fatal error C1083: 无法打开包括文件:“excpt.h”,找不到相关头文件。

解决方法1:设置头文件搜索路径(少啥添啥)

在这里插入图片描述
该方法最实用,少INCLUDE文件你搜到后,就将该文件所在的目录添加到系统环境变量INCLUDE里面,少LIB文件你就将它的目录添加到系统环境变量LIB里面,少了添啥。


解决方法2(如果头文件不在VC目录下面的话,就以上面的方法1为主):

打开cmd命令控制台,找到vcvars32.bat所在路径,例如:D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin,运行该批处理文件;

或者运行vcvarsall.bat文件:

cd D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
vcvarsall.bat

参考链接:
Windows环境下用nmake编译libevent

nmake编译libraw


vs2012编译64位Detours(其他vs版本同理)

1、下载地址
https://github.com/Microsoft/Detours
2、解压后,将system.mak和src目录拷贝到Visual Studio 11目录的VC目录下,并将src目录下的Makefile文件的只读属性去掉,然后打开Makefile文件进行如下修改:

CFLAGS=/nologo /W4 /WX- /we4777 /we4800 /Zi /MT /Gy /Gm- /Zl /Od /DDETOUR_DEBUG=$(DETOURS_DEBUG)

将上述选项中的/WX修改为/WX-,/WX 是警告被视为错误,而 /WX- 是警告不被视为错误。

3、右键以管理员模式运行VS2012 x64 Native Tools Command Prompt:

在这里插入图片描述

cd D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
d:
cd src
nmake

在这里插入图片描述
在这里插入图片描述
detours.lib生成成功,并会自动将detours.h、detver.h拷贝到D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC目录中的include目录中,这样就可以在你项目.cpp中直接引用detours.h头文件。


vs项目设置选项

D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC目录下编译生成的库目录lib.X64拷贝粘贴到你的项目目录中,并设置你的项目属性:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
detours4.0.1x64.lb是我

#include 
#include "detours.h"
#include "detoursHookApi.h"BOOL HookApi(PVOID *oldApi/*要HOOK的地址 变量*/, PVOID newApi/*新的函数地址*/)
{BOOL br = FALSE;DetourRestoreAfterWith();	//恢复原来状态DetourTransactionBegin();	//拦截开始DetourUpdateThread(GetCurrentThread());	//刷新当前线程//这里可以连续多次调用DetourAttach,表示HOOK多个函数//DetourAttach(&(PVOID&)OldCreateMutexA, NewCreateMutexA);DetourAttach(oldApi, newApi);//br返回NO_ERROR 表示成功br=DetourTransactionCommit();	//让拦截生效if(br == NO_ERROR){br = TRUE;}else{br = FALSE;}return br;
}BOOL UnHookApi(PVOID *oldApi, PVOID newApi)
{BOOL br = FALSE;DetourTransactionBegin();	//拦截开始DetourUpdateThread(GetCurrentThread());	//刷新当前线程//这里可以连续多次调用DetourAttach,表示撤销多个函数HOOK//DetourAttach(&(PVOID&)OldCreateMutexA, NewCreateMutexA);DetourDetach(oldApi, newApi);	//卸载HOOK//br返回NO_ERROR 表示成功br=DetourTransactionCommit();	//HOOK生效if(br == NO_ERROR){br = TRUE;}else{br = FALSE;}return br;
}

编译使用了Detours库的项目报错fatal error C1189

fatal error C1189: #error : Unknown architecture (x86, amd64, ia64, arm, arm64)
在vs中编译使用了Detours库的项目时,报上述错误。
解决方法:
在include "detours.h"之前要先包含windows.h头文件,即:

#include 
#include "detours.h"
#include "detoursHookApi.h"

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...