在Visual Studio 2015中使用Npcap编译VC++程序
我正在编译Visual Studio 2015 Community Edition中的以下程序。在Visual Studio 2015中使用Npcap编译VC++程序
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <pcap.h>
int main(int argc, char **argv)
{
pcap_if_t *alldevsp, *device;
char errbuf[100];
int count = 1;
//First get the list of available devices
printf("Finding available devices ... ");
if (pcap_findalldevs(&alldevsp, errbuf))
{
printf("Error finding devices : %s", errbuf);
exit(1);
}
printf("Done");
//Print the available devices
printf("\nAvailable Devices are :\n");
for (device = alldevsp; device != NULL; device = device->next)
{
printf("%d. %s - %s\n", count, device->name, device->description);
count++;
}
return 0;
}
对于pcap我已经从Npcap project @ GitHub下载了库。 我安装了用于获取DLL和使用SDK库的头文件和链接库的版本。 DLL的安装来自发行包0.0.8-r2,并且SDK从0.0.7-r9发行。
以下几个指针在网络上如何设置环境,我有以下设置。
- 配置属性 - > C/C++ - >常规 - >其他包含目录 - > SDK的头文件夹路径。
- 配置属性 - > C/C++ - >预处理器 - >预处理定义 - > WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
- 配置属性 - >链接器 - >常规 - >附加库目录 - >路径从SDK库文件夹。
- 配置属性 - >链接器 - >输入 - >附加依赖 - >自发布EXE wpcap.lib PACKET.LIB
DLL被安装在C:\ WINDOWS \ SYSTEM32 \ Npcap。 系统是Windows 10 Home。
问:
上述程序编译罚款。
1>------ Build started: Project: HelloWorld, Configuration: Debug Win32 ------
1> HelloWorld.cpp
1> HelloWorld.vcxproj -> C:\Users\xxx\documents\visual studio 2015\Projects\HelloWorld\Debug\HelloWorld.exe
1> HelloWorld.vcxproj -> C:\Users\xxx\documents\visual studio 2015\Projects\HelloWorld\Debug\HelloWorld.pdb (Full PDB)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
当我运行它时,它抱怨缺少wpcap.dll文件。我是VS新手,还有VC++,我用Google搜索和最简单的技术来解决这个问题,我将DLL从System32复制到生成.exe文件的文件夹中。
此DLL问题消失后,但现在我越来越。
'HelloWorld.exe' (Win32): Loaded 'C:\Users\xxx\Documents\Visual Studio 2015\Projects\HelloWorld\Debug\HelloWorld.exe'. Symbols loaded.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\ntdll.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\kernel32.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\KernelBase.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\ucrtbased.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\vcruntime140d.dll'. Cannot find or open the PDB file.
The thread 0x160c has exited with code -1073741701 (0xc000007b).
The thread 0xd5c has exited with code -1073741701 (0xc000007b).
The thread 0x16c4 has exited with code -1073741701 (0xc000007b).
The program '[9632] HelloWorld.exe' has exited with code -1073741701 (0xc000007b).
我使用它,它似乎有64位和32位DLL的混合。我不知道如何开始调试这个问题。
我真的很感激,如果有人指导我解决。
- 更好的方法(在VC++世界的良好做法)找到DLL而不是复制到exe文件夹。
- 有关如何找到哪个DLL导致问题的提示。
谢谢你的时间。
从配置中,您的HelloWorld.exe
是一个32位(x86)程序。我假设您使用的是x64 Windows操作系统,因此C:\Windows\System32\Npcap
适用于x64 DLL。而C:\Windows\SysWOW64\Npcap
适用于x86 DLL。
您得到了0xc000007b
错误,因为您的x86 HelloWorld.exe
正在尝试加载Npcap的x64 DLL,这肯定是不正确的。
因此,解决方案是将DLL(wpcap.dll
,Packet.dll
)从C:\Windows\SysWOW64\Npcap
复制到生成.exe文件的文件夹中。
另一种方法是将C:\Windows\System32
添加到PATH
环境变量中。因此,无论您的x86和x64二进制文件位于何处,它都会找到正确的Npcap DLL。
非常感谢您看看它,它解决了这个问题 –