Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » WinPcAp einbinden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.07.2009, 21:09 Uhr
~Sim_
Gast


Hi,

normalerweise programmiere ich mit Delphi, aber da ich nun WinPcAp brauche, versuche ich es mit C++.
Mein Problem ist das einbinden von WinPcAp.
Ich paste jetzt einfach mal aus dem Tutorial.

Zitat:
To create an application that uses wpcap.dll with Microsoft Visual C++, follow these steps:
Include the file pcap.h at the beginning of every source file that uses the functions exported by library.

Habe ich gemacht.

Zitat:
If your program uses Win32 specific functions of WinPcap, remember to include WPCAP among the preprocessor definitions.
If your program uses the remote capture capabilities of WinPcap, add HAVE_REMOTE among the preprocessor definitions. Do not include remote-ext.h directly in your source files.
Set the options of the linker to include the wpcap.lib library file specific for your target (x86 or x64). wpcap.lib for x86 can be found in the \lib folder of the WinPcap developer's pack, wpcap.lib for x64 can be found in the \lib\x64 folder.
Set the options of the linker to include the winsock library file ws2_32.lib. This file is distributed with the C compiler and contains the socket functions for Windows. It is needed by some functions used by the samples in the tutorial.

Dabei liegt das Problem.


Zitat:
To add a preprocessor definition, you must select Settings from the Project menu, then select C/C++ from the tab control, and under the category General, you must add the definition under the Preprocessor Definitions text box.

In C++/Allgemein finde ich 'Zusätzliche Include verzeichnisse'.
Dort kann ich einen Ordner auswählen - aber welchen?


Zitat:
To add a new library to the project with Microsoft Visual C++, you must select Settings from the Project menu, then select Link from the tab control, and then add the name of the new library in the Object/library modules editbox.

Also den Linker find ich, weiter scheiterts aber.

Es sind leider wirklich anfängerfragen, aber ich bin halt von delphi gewöhnt einfach nur den namen der '.pas'-Datei in uses einzutragen und schon geht alles.
In diesem Chaos finde ich mich nicht zurecht.

Mfg.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.07.2009, 09:46 Uhr
Tommix



Hallo,
Preprozessor-Definitionen haben nichts mit den Include-Verzeichnissen zu tun.
Das genaue Vorgehen hängt von der konkreten Entwicklungsumgebung ab, beim Visual Studio 2005 / 2008 gibt es unter Projekt/Eigenschaften:
Konfigurationseigenschaften > C/C++ > Allgemein > Präprozessordefinitionen
Da müßte z.B. schon WIN32 drin stehen und HAVE_REMOTE oder was auch immer muß noch dazu.
Die Lib's stehen im gleichen Dialog unter
Linker > Eingabe > Zusätzliche Abhängigkeiten.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.07.2009, 10:35 Uhr
~Sim_
Gast


Hi,

ich habe das jetzt so alles gemacht,
hat auch gut geklappt :-)

Allerdings bekomme ich nun bei #include "pcap.h" die Errormeldung:

Zitat:
Microsoft Visual Studio 9.0\VC\include\stdio.h(358) : error C3163: "_vsnprintf": Attribute sind mit vorheriger Deklaration inkonsistent.
Microsoft Visual Studio 9.0\VC\include\stdio.h(350): Siehe Deklaration von '_vsnprintf'

Da ich selber stdio.h nicht eingebunden habe (nur pcap.h, sowie standartmäsig stdafx.h), gehe ich davon aus, dass WinPcAp nicht kompatibel mit meiner Visual Studio Version ist.
Liege ich da richtig, oder kann ich da irgendetwas machen?

Mfg.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.07.2009, 13:06 Uhr
Tommix



Aus der Ferne schwer zu sagen. "pcap.h" muß auf jeden Fall nach "stdafx.h" eingebunden werden. Ansonsten kannst Du mit F8 die Stellen mit den Fehlern anspringen.
Ich hab hier im Moment nur Visual Studio 2005, da wird diese Funktion (_vprintf) als "veraltet" bemeckert, wenn man sie benutzen will. Man soll sie durch _vsnprintf_s (welche mehr Argumente erwartet) ersetzen. Möglicherweise entsteht in dem neueren VS 2008 dadurch ein Konflikt, aber das ist jetzt alles ziehmlich ins Blaue geraten.
- Tommix

Dieser Post wurde am 17.07.2009 um 13:07 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.07.2009, 13:38 Uhr
0xdeadbeef
Gott
(Operator)


vsnprintf ist von diesem _s-Kram nicht betroffen, es erwartet bereits eine Bufferlänge.

Wie dem auch sei, neuere VCs definieren vsprintf etwa so:

C++:
#define vsprintf(a, b, c, d) _vsnprintf(a, b, c, d)


...um die gebräuchlicheren Teile von C99 so zur Verfügung zu stellen, dass alter, auf VC zugeschnittener Code noch läuft. (Alte VCs stellten nur _vsnprintf bereit)

In manchen alten Bibliotheken findet man ein vergleichbares Makro (bzw. einen Funktionsstub), der sich mit der VC-Deklaration in die Haare kriegt. Durchsuch mal die winpcap-Header nach etwas derartigen und nimm es ggf. raus.

Nachtrag: Das befindet sich in der pcap-stdinc.h in Zeile 63.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 17.07.2009 um 13:54 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.07.2009, 14:10 Uhr
~Sim_
Gast


An Oaxdeadbeef:
Den Code habe ich nicht gefunden.

An Tommix:
Ich paste jetzt einfach mal den Code um die Fehler herum:

Code:
_Check_return_opt_ _CRT_INSECURE_DEPRECATE(vsnprintf_s) _CRTIMP int __cdecl vsnprintf(_Out_cap_(_MaxCount) char * _DstBuf, _In_ size_t _MaxCount, _In_z_ _Printf_format_string_ const char * _Format, va_list _ArgList);  //Fehler-Punkt 1
#if __STDC_WANT_SECURE_LIB__
_Check_return_opt_ _CRTIMP int __cdecl vsnprintf_s(_Out_z_cap_(_DstSize) char * _DstBuf, _In_ size_t _DstSize, _In_ size_t _MaxCount, _In_z_ _Printf_format_string_ const char * _Format, va_list _ArgList);
#endif
_Check_return_opt_ _CRTIMP_ALTERNATIVE int __cdecl _vsnprintf_s(_Out_z_cap_(_SizeInBytes) char * _DstBuf, _In_ size_t _SizeInBytes, _In_ size_t _MaxCount, _In_z_ _Printf_format_string_ const char * _Format, va_list _ArgList);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(int, _vsnprintf_s, char, _Dest, _In_ size_t, _MaxCount, _In_z_ _Printf_format_string_ const char *, _Format, va_list, _Args)
#pragma warning(push)
#pragma warning(disable:4793)
__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST_EX(int, __RETURN_POLICY_SAME, _CRTIMP, _snprintf, _vsnprintf, _Pre_notnull_ _Post_maybez_ char, _Out_cap_(_Count) _Post_maybez_, char, _Dest, _In_ size_t, _Count, _In_z_ _Printf_format_string_ const char *, _Format)  //Fehler-Punkt 2
#pragma warning(pop)



Ich hoffe das hilft was.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.07.2009, 15:54 Uhr
Tommix



Um über diese Zeilen nachzudenken, ist es entschieden zu heiß heute
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.07.2009, 16:53 Uhr
0xdeadbeef
Gott
(Operator)


Na, du wirst ja wohl nicht in den Headern des Compilers rumschreiben wollen.

In WinPcap 4.0.2 steht das Makro, das den Fehler auslöst, in der vorletzten Zeile der WpdPack/Include/pcap-stdinc.h, wie ich oben ja schonmal erwähnt hatte. Je nachdem, welche Version davon du benutzt, kann sich das natürlich verschoben haben, bei mir sieht das so aus:

C++:
#define vsnprintf _vsnprintf


und das kriegt sich mit den Makrodefinitionen in der stdio.h natürlich böse in die Haare. Ich halte es auch sehr gut für möglich, dass das

C++:
#define snprintf _snprintf


in der Zeile davor ähnliche Probleme auslösen wird.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.07.2009, 21:07 Uhr
~Sim_
Gast


Sorry @ Ox, hatte das Edit nicht mehr gesehen.

Es funktioniert jetzt.
(Btw. snprintf macht keine Probleme).

Ty + Mfg.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: