簡體   English   中英

如何將IcmpSendEcho2與PIO_APC_ROUTINE一起使用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM