quote:以下是引用火麒麟在2011-12-22 09:31:33的发言:quote:以下是引用youhm在2011-12-19 23:07:39的发言:
我想是编译的问题, LAR1 P##VARIABLE这个编译可能要求P##VARIABLE一定是个确定的地址才能通过编译,如果是FC的参数,只有临时变量地址是确定的,其它参数会因实参不同而变。
在FB中的IN/OUT中定义ARRAY,POINTER,ANY,变量地址也不是确定的,也要通过实参来确定的,但是就可以。youhm大侠这里的地址指的是变量的实际地址还是指向变量的指针地址呢?
是指的变量的地址
在FB里IN_OUT使用复杂数据类型情况不一样,当在IN_OUT里定义ARRAY、STRUCT、UDT等类型的变量,会发现这些变量所占用的空间是6个字节,也就是通过指针来访问这些变量的实参,而我们使用LAR1 P#*得到的是这个指针的地址,所以这个地址是在背景数据块里是确定的地址,而Pointer和Any类型则不用说了,是把实参的值直接拷贝到背景数据块里。