![](/img/trans.png)
[英]IcmpSendEcho2 async callback not working (c++, vs2010, win7)
[英]How to use IcmpSendEcho2 with PIO_APC_ROUTINE?
我是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'可以做到,因為我找到了 ,但是顯然我缺少了一些東西。
如果您需要任何其他信息,請告訴我。
提前致謝。
首先, 不要轉換回調函數 。 曾經 。
其次, 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);
...是聲明一個返回函數指針的函數。 這不是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.