รวบรวมโปรแกรม VC ++ ด้วย Npcap ใน Visual Studio 2015

ฉันกำลังรวบรวมโปรแกรมต่อไปนี้ใน Visual Studio 2015 Community Edition

#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 @ 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_REMOTE
  3. คุณสมบัติการกำหนดค่า -> ตัวเชื่อมโยง -> ทั่วไป -> ไดเรกทอรีไลบรารีเพิ่มเติม -> เส้นทางไปยังโฟลเดอร์ไลบรารีจาก SDK
  4. คุณสมบัติการกำหนดค่า -> ตัวเชื่อมโยง -> อินพุต -> การพึ่งพาเพิ่มเติม -> wpcap.lib Packet.lib

DLL จาก exe ที่วางจำหน่ายได้รับการติดตั้งใน 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).

ฉันค้นหาใน Google ดูเหมือนว่าจะมี DLL 64 บิตและ 32 บิตผสมกัน ฉันไม่รู้ว่าจะเริ่มแก้ไขข้อบกพร่องนี้อย่างไร

ฉันจะขอบคุณมากถ้ามีคนแนะนำฉันในการแก้ปัญหา

  1. วิธีที่ดีกว่า (แนวปฏิบัติที่ดีในโลก VC++) เพื่อค้นหา DLL แทนที่จะคัดลอกไปยังโฟลเดอร์ exe
  2. เคล็ดลับเกี่ยวกับวิธีการค้นหา DLL ใดที่เป็นสาเหตุของปัญหา

ขอบคุณสำหรับเวลา


person baba.kabira    schedule 04.08.2016    source แหล่งที่มา


คำตอบ (1)


จากการกำหนดค่า HelloWorld.exe ของคุณเป็นโปรแกรม 32 บิต (x86) ฉันคิดว่าคุณกำลังใช้ระบบปฏิบัติการ Windows x64 ดังนั้น C:\Windows\System32\Npcap จึงใช้สำหรับ x64 DLLs และ C:\Windows\SysWOW64\Npcap ใช้สำหรับ x86 DLLs

คุณได้รับข้อผิดพลาด 0xc000007b เนื่องจาก x86 HelloWorld.exe ของคุณพยายามโหลด x64 DLLs ของ Npcap ซึ่งไม่ถูกต้องอย่างแน่นอน

ดังนั้นวิธีแก้ปัญหาคือการคัดลอก DLLs (wpcap.dll, Packet.dll) จาก C:\Windows\SysWOW64\Npcap ไปยังโฟลเดอร์ที่สร้างไฟล์ .exe

อีกวิธีหนึ่งคือการเพิ่ม C:\Windows\System32 ให้กับตัวแปรสภาพแวดล้อม PATH ดังนั้นไบนารี x86 และ x64 ของคุณจะค้นหา Npcap DLLs ที่ถูกต้องเสมอไม่ว่าจะอยู่ที่ใดก็ตาม

person Yang Luo    schedule 04.08.2016