2015-12-03 64 views
0

以前我有一个文件映射内存不足的问题。SYS(3050)正在抛出函数参数值,类型或计数无效错误

然后,根据少数专家的建议,我在主程序中使用了以下代码,解决了问题并且工作正常。 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)行无效。

如果我忽略这个并继续,那么没有足够的内存用于文件映射。

有人可以告诉我该怎么办才能解决这个问题吗?是因为Windows 7的64位操作系统(因为Windows 7和32位的其他两台计算机可以正常工作)

+1

我会说别的是这个问题 - 我从来没有必要在20多年内调整这个设置,并回答另一个问题,我们在64位Windows上有成千上万的客户。这是什么原因导致你首先进入sys(3050)路线? –

+0

嗨,Alan说,当RAM大于2GB时,VFP 7无法分配内存,因此请求设置VFP所需的最小和最大内存。然后,我将SYS(3050)放入我的主体中,然后解决问题 –

+2

我唯一的建议确实是使用VFP9 SP2。 –

回答

0

正如Alan B所说,'文件映射内存不足'的问题往往会消失切换到VFP9 SP2(这是使用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) 

背景:呼吁为0的极限参数的功能是一样的称它没有限制(即它得到的限制而不是设置它)。用负参数调用该函数会导致该函数发生范围错误。

相关问题