2015-12-03 66 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的極限參數的功能是一樣的稱它沒有限制(即它得到的限制而不是設置它)。用負參數調用該函數會導致該函數發生範圍錯誤。

相關問題