![]() |
#2
风吹过b2017-03-08 11:02
Declare 语句
用于在模块级别中声明对动态链接库 (DLL) 中外部过程的引用。 语法 1 [Public | Private] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])] 语法 2 [Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type] Declare 语句的语法包含下面部分: 部分 描述 Public 可选的。用于声明对所有模块中的所有其它过程都可以使用的过程。 Private 可选的。用于声明只能在包含该声明的模块中使用的过程。 Sub 可选的(但 Sub 或 Function 二者需选其一)。表示该过程没有返回值。 Function 可选的(但 Sub 或 Function 二者需选其一)。表示该过程会返回一个可用于表达式的值。 name 必需的。任何合法的过程名。注意动态链接库的入口处(entry points)区分大小写。 Lib 必需的。指明包含所声明过程的动态链接库或代码资源。所有声明都需要 Lib 子句。 libname 必需的。包含所声明的过程动态链接库名或代码资源名。 Alias 可选的。表示将被调用的过程在动态链接库 (DLL) 中还有另外的名称。当外部过程名与某个关键字重名时,就可以使用这个参数。当动态链接库的过程与同一范围内的公用变量、常数或任何其它过程的名称相同时,也可以使用 Alias。如果该动态链接库过程中的某个字符不符合动态链接库的命名约定时,也可以使用 Alias。 aliasname 可选的。动态链接库或代码资源中的过程名。如果首字符不是数字符号 (#),则 aliasname 是动态链接库中该过程的入口处的名称。如果首字符是 (#),则随后的字符必须指定该过程的入口处的顺序号。 arglist 可选的。代表调用该过程时需要传递的参数的变量表。 type 可选的。Function 过程返回值的数据类型;可以是 Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)或 Variant,用户定义类型,或对象类型。 -------------- Private 申明范围 Declare 命令 Sub 过程,无返回值 CopyMemory 标识符,名字 Lib "KERNEL32" 属于这个库 Alias "RtlMoveMemory" 在库里的名字 hpvDest As Any, 要复制内存块的目的地址 ByVal hpvSource As Long, 要复制内存块的源地址 ByVal cbCopy As Long 指定要复制内存块的大小,单位为字节 还有啥不明白了? |
TCP服务器,接收到TCP客服端发的数据。这数据走向过程是先到内存再到TCP服务器接收函数。
数据还是先到TCP服务器接收函数,再到内存的过程。
还有下面这段代码怎么理解,我看不懂。括号内的几个参数有什么用lib Alias代表什么
Private Declare Sub CopyMemory _
Lib "KERNEL32" _
Alias "RtlMoveMemory" (hpvDest As Any, _
ByVal hpvSource As Long, _
ByVal cbCopy As Long)