gpt4 book ai didi

c++ - 如何将 IcmpSendEcho2 与 PIO_APC_ROUTINE 一起使用?

转载 作者:行者123 更新时间:2023-11-28 00:56:43 24 4
gpt4 key购买 nike

我是一个 C++ 新手,我正在尝试用 IcmpSendEcho2 制作一个“ping 工具”但我无法使用 APC。

我遇到了这个编译错误:

>error C2220: warning treated as error - no 'object' file generated
>warning C4191: 'type cast' : unsafe conversion from 'PIO_APC_ROUTINE (__cdecl *)(PVOID,PIO_STATUS_BLOCK,ULONG)' to 'PIO_APC_ROUTINE'
> Calling this function through the result pointer may cause your program to fail

这是我的 APC 声明:

PIO_APC_ROUTINE GotIt(PVOID param, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved);

这是我的 APC 定义:

PIO_APC_ROUTINE GotIt(PVOID param, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved)
{
printf("GOT IT!\n");
return NULL;
}

这就是我制作 IcmpSendEcho2 的方式:

DWORD dwRetVal = IcmpSendEcho2(hIcmpFile, NULL, (PIO_APC_ROUTINE) GotIt, NULL,
ipaddr, SendData, sizeof (SendData), NULL,
ReplyBuffer, ReplySize, 1000);

我认为“(PIO_APC_Rountine) GotIt”会做到这一点,因为我找到了 this ,但显然我遗漏了一些东西。

如果您需要任何其他信息,请告诉我。

提前致谢。

最佳答案

首先,don't cast callback functions . 曾经

其次,PIO_APC_ROUTINE声明为:

typedef
VOID
(NTAPI *PIO_APC_ROUTINE) (
IN PVOID ApcContext,
IN PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG Reserved
);

所以你的 GotIt 函数应该是:

VOID NTAPI GotIt(
IN PVOID ApcContext,
IN PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG Reserved
);

NTAPI__stdcall,而不是默认的 __cdecl,这是错误消息告诉您的内容。

你用这个做了什么:

PIO_APC_ROUTINE GotIt(PVOID param, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved);

...声明一个返回函数指针的函数。这不是您想要的。

关于c++ - 如何将 IcmpSendEcho2 与 PIO_APC_ROUTINE 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10822771/

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