2012-05-30 3 views
0

저는 C++ 초보자이고 IcmpSendEcho2으로 "핑 도구"를 만들려고하고 있지만 APC와 작동하도록 만들 수는 없습니다.PIO_APC_ROUTINE와 함께 IcmpSendEcho2를 사용하는 방법은 무엇입니까?

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

이 내 APC 정의입니다 : 이것은 내 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 

입니다 :

나는이 컴파일 오류로 실행 해요

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); 

은 내가 this을 발견하기 때문에 '(PIO_APC_Rountine) GotIt이', 그것을 할 것이라고 생각하지만 분명히 내가 모르는 뭔가가있어. 당신이 어떤 추가 정보가 필요하면

알려주세요. 고급의

감사합니다.

답변

2

첫째, don't cast callback functions. 까지입니다.

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

그래서 당신의 GotIt 기능이 있어야한다 :

둘째, PIO_APC_ROUTINE는 다음과 같이 선언

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

NTAPI

는 오류 메시지가 당신을 말하고 무엇을하지 기본 __cdecl, __stdcall입니다 . 이과했던 어떤

는 :

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

... 함수를 선언입니다 반환 함수 포인터. 이것은 당신이 원하는 것이 아닙니다.

관련 문제