gpt4 book ai didi

c++ - 在 windows.h 中使用 GetProcAddress() 时出现奇怪的编译器消息

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:36 25 4
gpt4 key购买 nike

我正在为某些目的开发一个简单的数据包发送器/接收器(在 Dev c++ 中)..想要添加更多功能。但是我遇到了一个奇怪的错误“函数参数太多”。我的代码是

#include <iostream>
#include <windows.h>

using namespace std;

int main(int argc, char *argv[])
{
HINSTANCE dllhandle = LoadLibrary("wpcap.dll");
FARPROC sendpacket = NULL, iface_handle = NULL;
iface_handle = GetProcAddress(dllhandle, "pcap_open");
char* iface_name = "\\Device\\NPF_{EADB4C21-B0AF-4EF2-86AB-80A37F399D1C}";
char *errbuf[256];
int iface = iface_handle(iface_name, 1000, 1, 500, NULL, errbuf); // The Error is here
system("pause");
return 0;
}

谁能告诉我哪里出错了?

最佳答案

首先引用 pcap_open() 的官方文档:

pcap_t* pcap_open  ( const char *  source,  
int snaplen,
int flags,
int read_timeout,
struct pcap_rmtauth * auth,
char * errbuf
)

然后看FARPROC的定义在windef.h :

typedef INT_PTR (FAR WINAPI *FARPROC)();

您正在尝试调用 pcap_open()使用完全错误的函数签名。这就是编译器提示参数太多的原因。如果您甚至设法进行此编译,您几乎肯定会搞砸堆栈。

<罢工>为什么要使用 LoadLibrary() 动态加载 WinPcap dll? ?为什么不使用 the method outlined in the official documentation ?

<罢工>

创建使用 wpcap.dll 和 Microsoft Visual 的应用程序 C++,遵循以下步骤:

在每个源文件的开头包含文件 pcap.h 使用库导出的函数。

如果您的程序使用 WinPcap 的 Win32 特定功能,请记住 在预处理器定义中包含 WPCAP

如果你的程序使用了 WinPcap 的远程捕获功能,添加 *HAVE_REMOTE* 在预处理器定义中。不要包括 remote-ext.h 直接在您的源文件中。

设置链接器的选项以包含 wpcap.lib库文件 特定于您的目标(x86 或 x64)。可以找到 x86 的 wpcap.lib 在 WinPcap 开发包的\lib 文件夹中,wpcap.lib for x64 可以在\lib\x64 文件夹中找到。

您正在使用 Dev C++,它可能没有 VC++ 编译器。您仍然需要声明正确的函数签名。一种可能的方法是通过 typedef :

#include <iostream>
#include <windows.h>

struct pcap_t;
struct pcap_rmtauth;
typedef pcap_t* (*pcap_open_func_ptr)(const char *source,
int snaplen, int flags, int read_timeout,
pcap_rmtauth *auth, char *errbuf);

int main(int argc, char *argv[])
{
HINSTANCE dllhandle = LoadLibrary("wpcap.dll");
pcap_open_func_ptr iface_handle =
reinterpret_cast<pcap_open_func_ptr>(
GetProcAddress(dllhandle, "pcap_open"));
char *errbuf[256];
pcap_t* iface = iface_handle(iface_name, 1000, 1, 500, NULL, errbuf);
// ...
return 0;
}

关于c++ - 在 windows.h 中使用 GetProcAddress() 时出现奇怪的编译器消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7179398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com