SYS(3050)抛出Function参数值,类型或计数无效错误

时间:2015-12-03 06:35:52

标签: function memory-management shared-memory foxpro

早些时候我遇到了文件映射内存不足的问题。

然后,根据一些专家的建议,我在我的主程序中使用了以下代码,这解决了问题并且工作正常。

SYS(3050,1,MIN(536870912,VAL(SYS(3050,1,0)))) SYS(3050,2,MIN(536870912,VAL(SYS(3050,1,0))))

但最近客户端的一台机器从XP 32位升级到Windows 7 64位。之后系统启动时 在SYS(3050)行抛出Function参数值,类型或计数的错误是无效的。

如果我省略了这个并继续,那么就没有足够的内存来进行文件映射。

任何人都可以建议我应该怎样做才能克服这个问题?是因为Windows 7的64位操作系统(因为Windows 7和32位的其他两台机器正常工作)

1 个答案:

答案 0 :(得分:0)

正如Alan B所说,问题是文件映射的内存不足,而且#39;当切换到VFP9 SP2时,它往往会消失(当使用VFP8 SP1时,它就是美中不足的一部分,而VFP8 SP1则是最稳固的。)

如果不能选择切换到VFP9,那么我建议将嵌套的SYS(3050,1,0)调用分解出来,并在将结果输入VAL()之前对结果进行消毒。至少它会更准确地指出问题发生的位置,借助调试器或IDA等工具指导进一步调查。

原始代码已经将参数限制在536870912,远低于SYS(3050)抛出范围错误的2 ^ 31的阈值。但是,参数必须严格为正,这需要添加MAX()术语:

local nLimit
nLimit = max(1, min(536870912, val(sys(3050, 1))))
sys(3050, 1, m.nLimit)
sys(3050, 2, m.nLimit)

背景:使用limit参数0调用函数与调用没有限制的函数相同(即获取限制而不是设置)。使用负参数调用函数会导致函数出现范围错误。