在Visual Studio 2015中使用Npcap编译VC++程序

Compiling VC++ program with Npcap in Visual Studio 2015

本文关键字:Npcap 编译 VC++ 程序 Visual Studio 2015      更新时间:2023-10-16

我正在Visual Studio 2015社区版中编译以下程序。

#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 - %sn", count, device->name, device->description);
        count++;
    }
    return 0;
}

对于pcap,我已经从Npcap项目@GitHub下载了库。我安装了获取DLL的版本,并将其SDK库用于头库和链接器库。DLL的安装来自版本包0.0.8-r2,SDK的安装来自0.0.7-r9。

根据网络上的几个指针如何设置环境,我有以下设置。

  1. 配置属性->C/C++->常规->其他包含目录->SDK头文件夹的路径
  2. 配置属性->C/C++->预处理器->预处理器定义->WIN32_DEBUG_CONSOLE WPCAP HAVE_ROTE
  3. 配置属性->链接器->常规->附加库目录->SDK库文件夹的路径
  4. 配置属性->链接器->输入->附加依赖项->wpcap.lib数据包.lib

exe版本的DLL安装在C:\Windows\System32\Npcap中。系统为Windows 10 Home。

问题:

上面的程序编译得很好。

1>------ Build started: Project: HelloWorld, Configuration: Debug Win32 ------
1>  HelloWorld.cpp
1>  HelloWorld.vcxproj -> C:Usersxxxdocumentsvisual studio 2015ProjectsHelloWorldDebugHelloWorld.exe
1>  HelloWorld.vcxproj -> C:Usersxxxdocumentsvisual studio 2015ProjectsHelloWorldDebugHelloWorld.pdb (Full PDB)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

当我运行它时,它抱怨缺少wpcap.dll文件。我是VS和VC++的新手,我在谷歌上搜索了一下,发现最简单的技术刚刚解决了这个问题,我把DLL从System32复制到了生成.exe文件的文件夹中。

在这个DLL问题消失后,但现在我得到了。

'HelloWorld.exe' (Win32): Loaded 'C:UsersxxxDocumentsVisual Studio 2015ProjectsHelloWorldDebugHelloWorld.exe'. Symbols loaded.
'HelloWorld.exe' (Win32): Loaded 'C:Windowssyswow64ntdll.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:Windowssyswow64kernel32.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:Windowssyswow64KernelBase.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:Windowssyswow64ucrtbased.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:Windowssyswow64vcruntime140d.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的混合。我不知道如何开始调试这个问题。

如果有人指导我解决问题,我将不胜感激。

  1. 更好的方法(VC++世界中的好做法(找到DLL,而不是复制到exe文件夹
  2. 关于如何查找导致此问题的DLL的提示

谢谢你抽出时间。

从配置来看,HelloWorld.exe是一个32位(x86(程序。我假设您使用的是x64 Windows操作系统,因此C:WindowsSystem32Npcap适用于x64 DLL。C:WindowsSysWOW64Npcap适用于x86 DLL。

您得到了0xc000007b错误,因为您的x86 HelloWorld.exe正在尝试加载Npcap的x64 DLL,这肯定是不对的。

因此,解决方案是将DLL(wpcap.dllPacket.dll(从C:WindowsSysWOW64Npcap复制到生成.exe文件的文件夹中。

另一种方法是将C:WindowsSystem32添加到PATH环境变量中。因此,无论x86和x64二进制文件位于何处,它们都将始终找到正确的Npcap DLL。