prvePROC=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd ,GWL_WNDPROC,(long)MyselfPROC);warning C4311: “类型转换”: 从“LRESULT (__stdcall *)(HWND,UINT,WPARAM,LPARAM)”到“long”的指针截断warning C4312: “类型转换”: 从“LONG”转换到更大的“WNDPROC”prvePROC 和 MyselfPROC  都是WNDPROC 窗口过程类型.上面两个警告要怎么去掉?

解决方案 »

  1.   

    是不是64位的问题。
    SetWindowLong改SetWindowLongPtr
      

  2.   

    prvePROC=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd ,GWL_WNDPROC,(WNDPROC)MyselfPROC);
      

  3.   

    buggycode(风雨寒夜)  
     
       是不是64位的问题。
    SetWindowLong改SetWindowLongPtr==============================================================================不是这个问题,改了也还有警告.你那64位是不是指CPU ?
      
     
      

  4.   

    laiyiling(◆blog.csdn.net/laiyiling◆) ( )  
     
       prvePROC=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd ,GWL_WNDPROC,(WNDPROC)MyselfPROC);
      
    ============================================================================== error C2664: “SetWindowLongW”: 不能将参数 3 从“WNDPROC”转换为“LONG”我原先所做的强制类型转换都是针对 SetWindowLongW() 参数类型的.
      

  5.   

    改成SetWindowLongPtr之后MyselfPROC要用LONG_PTR来转换
      

  6.   

    warning C4244: “参数”: 从“LONG_PTR”转换到“LONG”,可能丢失数据
     warning C4312: “类型转换”: 从“LONG”转换到更大的“WNDPROC”还是存在警告还有,你们指的64位是不是指CPU 处理数据的能力?
      

  7.   

    你用SetWindowLongPtr还出这个错?
      

  8.   

    对的,还有如下错误warning C4244: “参数”: 从“LONG_PTR”转换到“LONG”,可能丢失数据
     warning C4312: “类型转换”: 从“LONG”转换到更大的“WNDPROC”
      

  9.   

    我只知道目前的windows2000系统,所有的指针都是32位的,int、long也是32位的,DWORD 也是32位的,WNDPROC就是指针。所以它们之间随便转换都无所谓。只需注意是否有符号。看你那个提示,应该是.net的提示,俺还没用过呢
      

  10.   

    不过,c#里的long是64位的,int是32位的。我觉得.net的int16,int32,int64这样的命名很好,一目了然!
      

  11.   

    我觉得.net的int16,int32,int64这样的命名很好,一目了然!
    int32* a;是像上面那样使用吗?
      

  12.   

    因为现在新的64位的CPU,Windows也出了64位的OS.所以在64位的系统中指针是64位的。
    仔细读读SetWindowLongPtr的定义,应该可以去掉这些警告。大概如下prvePROC=SetWindowLongPtr(GetDlgItem(IDC_EDIT1)->m_hWnd ,GWLP_WNDPROC ,MyselfPROC);
      

  13.   

    还是不行
    error C2664: “SetWindowLongW”: 不能将参数 3 从“LRESULT (__stdcall *)(HWND,UINT,WPARAM,LPARAM)”转换为“LONG”按我原来的写法,有警告,但运行不会出错.我是看 VC6.0的视频学的,好象在视频里没有警告.我用的是VC2005拜托帮忙分析下为什么这个警告,指针都截断了,还没影响