【问题标题】:SYS(3050) is throwing Function argument value,type or count is invalid errorSYS(3050) 抛出函数参数值、类型或计数无效错误
【发布时间】:2015-12-03 06:35:51
【问题描述】:

之前我遇到了文件映射内存不足的问题。

然后,根据少数专家的建议,我在主程序中使用了以下代码,这解决了问题并且运行良好。

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位的机器都正常工作)

【问题讨论】:

  • 我想说的是其他问题 - 我在 20 多年中从未需要调整该设置并回答我们在 64 位 Windows 上拥有数千名客户的另一个问题。最初是什么导致您走下 sys(3050) 路线?
  • 嗨艾伦,它说当RAM超过2GB时VFP 7无法分配内存,因此要求设置VFP所需的最小和最大内存。然后我将那个 SYS(3050) 放在我的 main 中,然后解决了这个问题
  • 我唯一的建议就是使用 VFP9 SP2。

标签: function memory-management shared-memory foxpro


【解决方案1】:

正如 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)

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

【讨论】:

    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 2017-11-19
    • 2019-01-25
    • 2016-10-02
    • 2023-01-25
    • 2019-07-13
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多