在《windows 网络编程》中在完成端口一段中GetQueuedCompletionStatus(CompletionPort, &BytesTransferred,
         (LPDWORD)&PerHandleData, (LPOVERLAPPED *) &PerIoData, INFINITE)
//第五个参数是LPOVERLAPPED *,而现在的PerIoData
typedef struct 
{
   OVERLAPPED Overlapped;
   WSABUF DataBuf;
   CHAR Buffer[DATA_BUFSIZE];
   DWORD BytesSEND;
   DWORD BytesRECV;
} PER_IO_OPERATION_DATA, * LPPER_IO_OPERATION_DATA;LPPER_IO_OPERATION_DATA PerIoData;这里为什么能直接把LPPER_IO_OPERATION_DATA造型为 LPOVERLAPPED
在GetQueuedCompletionStatus函数的特殊应用,还是Struct有这种造型的方法????
本人新手,不太明白,希望大家赐教!!!
刚注册还没有分。。可怜

解决方案 »

  1.   

    写了一段代码typedef struct _s1{
    int a;
    int b;
    }s1,* ps1;
    typedef struct _s2{
    s1 ts1;
    int c;
    }s2,* ps2;
    void prpst(ps1 ps){
    printf("s1.a=%d,s1.b=%d\n",ps->a,ps->b);
    }
    void prs2(s2 s){
    prpst((ps1)&s);//将struct s2 造型成 struct s1
    printf("s2.c=%d\n",s.c);
    }
    int main(int argc, char * argv[])
    {
    printf("Test demo\n");
    s1 t1;
    t1.a=100;
    t1.b=200;
    prpst(&t1);
    s2 t2;
    t2.ts1=t1;
    t2.c=300;
    prs2(t2);
    return 0;
    }看Struct有这种造型,本质原理还是不解??
      

  2.   

    看看OVERLAPPED在PER_IO_OPERATION_DATA结构中的位置
    在看看不管什么人写的IOCP,以下三个结构在PER_IO_OPERATION_DATA中的位置
    OVERLAPPED Overlapped;
    WSABUF DataBuf;
    CHAR Buffer[DATA_BUFSIZE];我想你或许该知道为什么要用以下写法
    GetQueuedCompletionStatus(CompletionPort, &BytesTransferred,
             (LPDWORD)&PerHandleData, (LPOVERLAPPED *) &PerIoData, INFINITE)