I'm a c++ newbie and I'm trying to make a "ping tool" with IcmpSendEcho2 but I can't make it to work with APCs.
I'm running into this compiling error:
>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
This is my APC declaration:
PIO_APC_ROUTINE GotIt(PVOID param, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved);
This is my APC definition:
PIO_APC_ROUTINE GotIt(PVOID param, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved)
{
printf("GOT IT!\n");
return NULL;
}
And this is how I make the IcmpSendEcho2:
DWORD dwRetVal = IcmpSendEcho2(hIcmpFile, NULL, (PIO_APC_ROUTINE) GotIt, NULL,
ipaddr, SendData, sizeof (SendData), NULL,
ReplyBuffer, ReplySize, 1000);
I thought '(PIO_APC_Rountine) GotIt' would do it, because I found this, but apparently I'm missing something.
If you need any additional information, let me know.
Thanks in advanced.
First, don't cast callback functions. Ever.
Second,
PIO_APC_ROUTINE
is declared as:So your
GotIt
function should be:NTAPI
is__stdcall
, not the default__cdecl
, which is what the error message is telling you.What you've done with this:
...is declare a function that returns a function pointer. This is not what you wanted.