如果您知道入口点(动态链接库中函数的名称),Access Basic 允许您调用动态链接库中的外部函数。但是,使用此方法的一个限制是您只能声明一次外部函数。如果您安装模块调用的相同Windows API,则当您尝试安装具有相同函数定义的模块时,不会出现未知错误。
您尝试安装的模块包含与现有模块相同的函数或过程名称。删除这些过程并使用“编辑”菜单上的“查找”命令搜索重复的过程名称。为了解决这个问题,需要使用一种称为“别名”的技术。该技术允许您为进程指定唯一的名称。但是,您选择的别名可能不唯一,因此为了使名称唯一,首先使用初始值和下划线声明从动态链接库调用的所有过程。例如,声明getActiveWindow 如下:
将bcb_GetActiveWindow Lib 'Kernel' 别名'GetActiveWindow'() 声明为整数。
将空指针传递给动态库
空32 位指针是有效的或某些动态链接库需要。使用0 指定NULL 值。如果函数调用过程并传递表达式0,则“”指定32 位NULL 指针。函数声明中的AS ANY 参数指示Access Basic 将值传递给函数声明,而不检查参数的类型。要调用的函数。
以下代码显示了声明将空指针参数传递给动态链接库中的过程的Access Basic 函数的正确方法。本节声明WriteProfileString 应用程序接口函数。这个功能是由外部的Windows动态链接库“内核”提供的。
声明函数WriteProfileString Lib 'Kernel'
(ByVal lpApplicationName 为Any、ByVal lpKeyName 为Any、ByVal lpString 为Any)
以下函数调用每个参数都为空值的外部过程。这会导致WriteProfileString 填充内部缓存缓冲区并将对WIN.INI 的更改写入磁盘。
重要该功能使用不当可能会导致一般保护失败或修改WIN.INI 文件。
函数nFlushIniCache()
nFlushIniCache=WriteProfileString (0, 0, 0)
终止函数
动态库调用的无符号整数
在许多情况下,从外部动态链接库调用时会返回2 字节无符号整数。但是,Access Basic 不支持此数据类型。要正确计算此数据类型,必须将其从无符号整数转换为Access Basic long 数据类型。
访问基本整数范围从-32768 到32767。无符号整数的范围是0 到65535。 Access Basic 使用最明显的位来放置值的符号位,因此如果值超过32767,则第16 位将设置为负号。必须手动调整第16 位才能计算无符号整数。
有两种方法可将无符号整数转换为Access Basic 长整数,或将Access Basic 长整数转换为无符号整数。第一种方法使用最基本的数学运算:将65535 添加或减去无符号整数值。第二种方法使用按位运算。事实上,算术方法和按位方法的工作方式相同,但算术方法可能更易于阅读,而按位方法执行起来可能更快。
算术方法
以下lArithUintToInt (nUint) 和lArithIntToUnit (lBytes) 过程演示如何使用算术方法来转换无符号整数。第一个函数读取无符号整数并返回转换为long 的值。第二个函数读取长整型值并返回转换为无符号整数的值。
函数lArithUintToInt(nUint 作为整数)
如果nUint 0
lArithUintToInt=nUint + 65536
除此之外
lArithUintToInt=nUint
如果终止
退出功能
函数nArithIntToUnit(l字节长度)
对于lBytes 32767
nArithIntToUnit=l 字节- 65536
除此之外
nArithIntToUnit=l 字节
如果终止
退出功能
按位运算方法
以下nBWUintToInt(lBytes) 和lBWIntToUint(nUint) 过程演示如何使用按位方法转换无符号整数。第一个函数读取无符号整数并返回转换为长整数的值。第二个函数读取一个长整型值并返回转换后的无符号整数值。第二个函数中使用了提示框语句,以防止在传递给函数的值大于64KB 时显示溢出信息。
1 0 1 0 0 0 1 1 11 10 00 00 (41952)
功能包括:
函数lBWIntToUint(nUint 作为整数)
LBWINtToUint=nUint 和HFFFF
退出功能
函数nBWUintToInt(长度为l 字节)
将nTemp 调暗为整数
对于lBytes 65535
MsgBox '传递了大于65535 的值'
终止函数
如果终止
nTemp=l 字节和H7FFF
nBWUintToInt=nTemp 或-(l 字节和H8000)
退出功能
注意:HFFFF 需要在十六进制数末尾添加“”。这可确保32 位十六进制数表示为16 位值。
访问基本技巧
Access 2003 具有一些以前未记录的功能,允许您指定要从“From”或“Report”属性表窗口中调用的过程。要进入最小窗口,请同时按SHIFT 和F2。
构建器表单函数
如果模块中的函数定义以“Builderr Form”开头并包含属性或事件标识符(例如Onclose),则可以通过按SHIFT 和F2 来调用此过程。例如,在窗体的设计窗口中,如果当前光标位于“属性”窗口的Onclose 事件中的编辑控件上,则按SHIFT+F2 会调用BuilderFormOnclose 函数。这用于表单和报告中的大多数属性以及所有事件。以下代码显示了该函数的格式。
Function BuilderFormOnClose(szFormName as string,
szControlName 作为字符串,szCurrentValue 作为字符串,szReserved 作为字符串)
如果szCurrentValue=''
DoCmd SelectObject A_MACRO, '', True
SendKeys '%n%fs' '新宏' '{Enter}'
Forms(szFormName).OnClose='新宏'
除此之外
DoCmd SelectObject A_MACRO,szCurrentValue,True
发送密钥“%d”
End 如果结束函数
参数szFormName、szControlName、szCurrentValue 和szReserved 即使不使用也必须声明。这些参数总是在调用函数时传递。如果未声明这些函数,Access 2003 不会调用该函数。如果该参数分配给Onclose 事件,则上一个进程将打开宏。如果编辑控件为空,则代码生成一个名为“New Macro”的新宏,并将编辑控件的值设置为“New Macro”。诚然,前面的例子并不完美,但它显示了创建完美且有效的程序所需的条件。
Access 2003 的优点:
Access 2003 Basic 提供了丰富的开发环境。该开发环境提供了足够的灵活性和对Microsoft Windows 应用程序编程接口的控制,同时保护您免受在高级或低级语言开发环境中进行开发时可能出现的许多问题。然而,许多优化、有效数据和模块化方面仅适用于应用程序设计人员。开发人员应该谨慎使用他们的算法。除了一般的编程概念之外,还有一些特殊的存储空间管理技术,如果使用得当,可以帮助应用程序更快地运行并减少其消耗的存储资源。
提高速度并减少代码大小
尽管可以使用多种技术来提高编码速度,但没有有效的算法替代方案。使用以下提示可以提高编码速度,同时减少应用程序消耗的存储空间。
使用整数执行数学运算
尽管Access 2003 使用协处理器来处理浮点运算,但整数运算总是更快。如果您的计算不涉及小数,请尝试使用整数或长整数而不是变量或双精度数。此外,整数除法比浮点除法更快。使用其他有效数据类型时的警告:有效算法无可替代。
避免使用过程调用
避免在循环体内使用子例程或函数调用。每次调用都会给您的代码带来额外的工作和时间。每次调用都需要将函数的局部变量和参数压入堆栈。堆栈大小是固定的,不能随意增长,必须与Access 2003 共享。
谨慎使用变长数据类型
变长数据类型提供了更大的灵活性,例如允许正确处理NULL值和自动处理溢出。此外,这种数据类型比传统数据类型更大并且消耗更多的存储空间。如前所述,可变长度数据类型变量执行数学计算的速度很慢。
使用变量来存储属性
查找和设置变量比对属性执行这些操作更快。如果您想要多次检索或查找某个属性值,则将该属性分配给变量并使用变量而不是属性将使您的代码运行得更快。例如,如果要在循环内的表中查找控件的属性,则将该属性分配给循环外的变量然后查询该变量比在循环内查找属性更快。
预载表格
如果您在应用程序启动时安装所有表并将其可见性属性设置为“false”,则应用程序的性能看起来会快得多。如果需要使表格可见,只需将表格的visible属性设置为“true”即可。这比安装桌子要快得多。请记住,您安装的每个表都会消耗应用程序全局堆中的存储空间。
ASP连接字符串应用
'驱动程序={Access 2003 驱动程序(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;'
暗淡
设置conn=server.createobject('adodb.connection')
conn.open 'provider=Microsoft.ACE.OLEDB.12.0;' '数据源='server.mappath('bbs.mdb')
-
绯红之境兑换码最新2021 礼包兑换码大全 2023-11-06
-
做超声检查时,医生为什么要在患者肚子上涂粘粘的东西 2023-11-06
-
小米mix fold有前置摄像头吗 2023-11-06
-
阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭 2023-11-06
-
天地劫幽城再临归真4-5攻略:第四章归真4-5八回合图文通关教学 2023-11-06
-
妄想山海怎么加好友 加好友方法大全 2023-11-06