对红虎winsock一对多示范的疑问

对红虎winsock一对多示例的疑问
红虎老师发表的winsock一对多示例很经典。但对其中的一处代码有疑问,请高手指点:

*** ActiveX Control Event ***
LPARAMETERS requestid

thisform.cmdNewConnect.Click

LOCAL lcName
lcName = "winsock" + ALLTRIM(STR(thisform.connectCount))

thisform.&lcName..olecontrol1.accept(RequestID)
上面示例最后一行中,宏代换&lcName后面为什么用两个点号才能正确运行?如何从VFP语法上来解释呢?
winsock vf9 红虎

------解决方案--------------------
第一个.是表示宏替换结束。
------解决方案--------------------
手册云

& 命令
示例 请参阅

执行宏替换。

语法

& MemVarName [.cExpression]

参数
& MemVarName

指定宏替换中引用的内存变量名或数组元素名。请不要加上用于区分内存变量与字段的前缀 M.,否则将产生语法错误。宏的长度不要超过 Visual FoxPro 中允许的最大语句长度。
在宏替换中,变量不能递归引用其自身。例如,下列语句将产生错误信息:

STORE '&gcX' TO gcX
? &gcX


出现在 DO WHILE、FOR 和 SCAN 中的宏替换语句只在循环开始时计算值,在后续的循环中则不再计算值。因此在循环内改变内存变量和数组元素的值对宏替换都无效。

.cExpression

句点分隔符 (.) 和 cExpression 选项可用来在宏后面追加额外的字符。使用 .cExpression 附加在宏后面的 cExpression 也可以是一个宏。