2016-08-04 15 views
0

Visual Studio 2015 Community Editionで次のプログラムをコンパイルしています。Visual StudioでVC++プログラムをNpcapでコンパイルする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 - %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からです。

ネット経由で環境を設定する方法をいくつか指摘したところ、以下の設定があります。

  1. 構成プロパティ - > C/C++ - >一般 - >追加インクルードディレクトリ - > SDKからのヘッダーフォルダへのパス。
  2. 構成プロパティ - > C/C++ - >プリプロセッサ - >プリプロセッサの定義 - > WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
  3. 構成プロパティ - >リンカ - >一般 - >追加ライブラリディレクトリ - > SDKからライブラリフォルダへのパス。
  4. 構成プロパティ - >リンカ - >入力 - >追加の依存 - >リリースexeファイルからPacket.lib
  5. wpcap.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 + +、私はグーグルと私はちょうど問題を乗り越えて、私はSystem32から.exeファイルが生成されていたフォルダにDLLをコピーしたと思った最も簡単な技術です。

この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検索では、64ビットと32ビットのDLLが混在しているようです。私はこの問題のデバッグを開始する手がかりがありません。

解決してくれる人がいれば、本当に感謝します。

  1. exeフォルダにコピーするのではなくDLLを見つける方が良い方法です(VC++の世界では良い方法です)。
  2. 問題を引き起こしているDLLを見つける方法に関するヒント。

ありがとうございました。

答えて

0

構成から、HelloWorld.exeは32ビット(x86)プログラムです。私はあなたがx64のWindows OSを使用していると仮定しますので、C:\Windows\System32\Npcapはx64 DLL用です。 C:\Windows\SysWOW64\Npcapはx86 DLL用です。

あなたのx86 HelloWorld.exeは間違いなく右ではありませんNpcapのx64のDLLをロードしようとしているので、あなたは0xc000007bエラーが発生しました。

解決策は、C:\Windows\SysWOW64\Npcapから.exeファイルが生成されていたDLLにDLL(wpcap.dllPacket.dll)をコピーすることです。

別の方法では、C:\Windows\System32を環境変数PATHに追加しています。したがって、x86とx64バイナリは、どこにあるかにかかわらず、正しいNpcap DLLを常に見つけます。

+0

多くのありがとうございました。問題を解決しました –

関連する問題