byref和byval的调用规则,晕了......
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Long, ByRef Source As Long, ByVal Length As Long)
或者声明为;
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
如下调用;
Dim a As Long
Dim b As Long
Dim addr_a As Long
Dim addr_b As Long
a = 1234
addr_a = VarPtr(a)
addr_b = VarPtr(b)
CopyMemory ByVal addr_b, ByVal addr_a, 4
Debug.Print b
可以执行,且必须要加byval。
那为什么自定义函数,形参用byref声明,传递实参的时候声明为byval的时候,编译会报错。
[解决办法]
基本概念,传值,传地址的问题,具体可以查阅MSDN
[解决办法]