add option to build with Npcap on Windows

pull/25/head
Jeffrey Quesnelle 2020-06-16 12:14:46 -04:00
parent 8f6ff86448
commit 7a71a35848
2 changed files with 23 additions and 2 deletions

View File

@ -6,6 +6,7 @@ option(LIBICSNEO_BUILD_DOCS "Build documentation. Don't use in Visual Studio." O
option(LIBICSNEO_BUILD_ICSNEOC "Build dynamic C library" ON)
option(LIBICSNEO_BUILD_ICSNEOC_STATIC "Build static C library" ON)
option(LIBICSNEO_BUILD_ICSNEOLEGACY "Build icsnVC40 compatibility library" ON)
set(LIBICSNEO_NPCAP_INCLUDE_DIR "" CACHE STRING "Npcap include directory; set to build with Npcap")
set(CMAKE_CXX_STANDARD 11)
@ -182,8 +183,13 @@ endif(NOT WIN32)
# winpcap
if(WIN32)
if(LIBICSNEO_NPCAP_INCLUDE_DIR STREQUAL "")
target_include_directories(icsneocpp PUBLIC AFTER third-party/winpcap/include)
add_definitions(-DWPCAP -DHAVE_REMOTE -DWIN32_LEAN_AND_MEAN)
else()
target_include_directories(icsneocpp PUBLIC AFTER ${LIBICSNEO_NPCAP_INCLUDE_DIR})
add_definitions(-DNPCAP -DWIN32_LEAN_AND_MEAN)
endif()
endif(WIN32)
if(LIBICSNEO_BUILD_ICSNEOC)

View File

@ -27,6 +27,21 @@ bool PCAPDLL::ok() const
PCAPDLL::PCAPDLL()
{
#ifdef NPCAP
BOOL(WINAPI * SetDllDirectory)(LPCTSTR);
char sysdir_name[512];
int len;
SetDllDirectory = (BOOL(WINAPI*)(LPCTSTR)) GetProcAddress(GetModuleHandle("kernel32.dll"), "SetDllDirectoryA");
if (SetDllDirectory != NULL)
{
len = GetSystemDirectory(sysdir_name, 480); // be safe
if (len)
{
strcat(sysdir_name, "\\Npcap");
SetDllDirectory(sysdir_name);
}
}
#endif
dll = LoadLibrary("wpcap.dll");
if(dll == NULL) {