Private Sub Command1_Click()
  Dim stra As String
  Dim strb As String
    Dim p As Long
   stra = Text1.Text
   strb = Text2.Text
   copymemory(varptr(p),varptr(stra),4)
   copymemory(varptr(stra),varptr(strb),4)
   copymemory(varptr(strb),varptr(p),4)
   Text1.Text = stra
   Text2.Text = strb
End Sub
编译过程中说copymemory(varptr(p),varptr(stra),4)语法错误,在通用模块里已经声明了copymemory
希望大家解决一下

解决方案 »

  1.   

    加byval:
    copymemory(varptr(p),varptr(stra),byval 4)
      

  2.   

    现在不清楚你的函数如何声明的,但是至少你现在还有语法错误:copymemory(varptr(p),varptr(stra),4)copymemory是过程,无返回值,如果需要使用一对括号括着参数,那就得在前面加CALL:CALL copymemory(varptr(p),varptr(stra),4)否则就要去掉括号:copymemory varptr(p),varptr(stra),4另外,以你的调用方式来看,三个参数都是传入的值,则正确的声明应该是这样:Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _ 
     ByVal Destination As Long, _ 
     ByVal Source As Long, _ 
     ByVal Length As Long)
    看样子你对VB6并不熟悉.是从别的语言转过来的?
      

  3.   

    谢谢大家的建议,经过修改可以正常运行了。不过还是有疑问,API函数申明,我是用API浏览器复制过去的,可以对参数的传递方式进行修改吗?确实,对VB不熟悉,尤其读内存部分,云里雾里的,希望大家提供一些方法和实例。
      

  4.   

    VB6里面API的声明字符串,只是为了让IDE将编码者的错误限制在一定范围以内,方便排查。比如你复制的那个API声明,如果前两个参数都是BYREF XXX AS ANY,就是告诉IDE,不对输入的参数的类型进行检查。而我给你改的那个声明,是明确地告诉IDE,输入的三个参数都是LONG类型的值,除此之外的其它值(不包括可以自动强制类型转换的值),都会报错,以提示编码者。