VB:
   oldproc=GetWindowLong(RichEdit.hWnd,GWL_WNDPROC)
   ......
   a=CallWindowProc(oldproc,hWnd,Msg,wParam,lParam)
汇编:
    invoke GetWindowLong,hWnd,GWL_WNDPROC
    mov oldproc,eax
    ......
    invoke CallWindowProc,oldproc,hWnd,uMsg,wParam,lParam
因为Delphi中GetWindowLong返回值为Integer,而CallWindowProc的第一个参数
要求是Pointer。经过测试,强制类型转换不能通过!

解决方案 »

  1.   

    可以这样试试:oldproc:=GetWindowLong(RichEdit.hWnd,GWL_WNDPROC)
       ......
       a:=CallWindowProc(@oldproc,hWnd,Msg,wParam,lParam)
      

  2.   

    同意楼上所说,对Pointer类型就变量的地址,取变量地址要通过@地址运算符来求,不能使用强制转换。
      

  3.   

    问题已经得到解决!原因是要在函数后加  Stdcall 
    但不知道这是为什么?
      

  4.   

    stdcall的意思是遵循WIN32调用,因为API都是C语言写的标准的WIN32库,C和DELPHI在编译时参数压栈方式是不相同的http://www.skin-studio.com
      

  5.   

    设定参数的调用约定,Stdcall方式使用Windows标准传递参数,参数从右到左入栈,适用于调用API