Kompilasi program VC++ dengan Npcap di Visual Studio 2015

Saya mengkompilasi program berikut dalam 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;
}

Untuk pcap saya telah mengunduh perpustakaan dari proyek Npcap @ GitHub. Saya menginstal rilis untuk mendapatkan DLL dan menggunakan perpustakaan SDK untuk perpustakaan header dan linker. Instalasi DLL berasal dari paket rilis 0.0.8-r2 dan SDK dari 0.0.7-r9.

Mengikuti beberapa petunjuk di internet cara mengatur lingkungan, saya memiliki pengaturan berikut.

  1. Properti Konfigurasi -> C/C++ -> Umum -> Direktori Sertakan Tambahan -> Jalur ke folder header dari SDK.
  2. Properti Konfigurasi -> C/C++ -> Praprosesor -> Definisi Praprosesor -> WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
  3. Properti Konfigurasi -> Linker -> Umum -> Direktori Perpustakaan Tambahan -> Jalur ke folder perpustakaan dari SDK.
  4. Properti Konfigurasi -> Linker -> Input -> Dependensi Tambahan -> wpcap.lib Packet.lib

DLL dari rilis exe diinstal di C:\Windows\System32\Npcap. Sistemnya adalah Windows 10 Home.

Pertanyaan:

Program di atas dapat dikompilasi dengan baik.

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 ==========

Ketika saya menjalankannya, ia mengeluh tentang file wpcap.dll yang hilang. Saya baru mengenal VS dan juga VC++, saya mencari di Google dan teknik paling sederhana yang saya temukan baru saja mengatasi masalah ini, saya menyalin DLL dari System32 ke folder tempat file .exe dibuat.

Setelah masalah DLL ini hilang, tetapi sekarang saya mendapatkannya.

'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).

Saya googling, sepertinya ada campuran DLL 64 bit dan 32 bit. Saya tidak tahu bagaimana memulai men-debug masalah ini.

Saya akan sangat menghargai jika seseorang membimbing saya, untuk menyelesaikannya.

  1. Cara yang lebih baik (praktik yang baik di dunia VC++) untuk menemukan DLL daripada menyalin ke folder exe.
  2. Kiat tentang cara menemukan DLL mana yang menyebabkan masalah.

Terima kasih untuk waktunya.


person baba.kabira    schedule 04.08.2016    source sumber


Jawaban (1)


Dari konfigurasi, HelloWorld.exe Anda adalah program 32-bit (x86). Saya berasumsi Anda menggunakan OS Windows x64, jadi C:\Windows\System32\Npcap untuk DLL x64. Dan C:\Windows\SysWOW64\Npcap untuk x86 DLL.

Anda mendapat kesalahan 0xc000007b karena x86 HelloWorld.exe Anda mencoba memuat DLL x64 Npcap, yang pastinya tidak benar.

Jadi solusinya adalah menyalin DLL (wpcap.dll, Packet.dll) dari C:\Windows\SysWOW64\Npcap ke folder tempat file .exe dibuat.

Cara lain adalah menambahkan C:\Windows\System32 ke variabel lingkungan PATH. Jadi biner x86 dan x64 Anda akan selalu menemukan DLL Npcap yang benar di mana pun lokasinya.

person Yang Luo    schedule 04.08.2016