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"

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...