我即將在我的遊戲中實現保存/加載功能,並認爲可能使用Windows的小型轉儲文件來實現此目的。我可以使用Windows的小型轉儲文件在我的遊戲中實現「保存」/「還原」嗎?
我沒有這方面的經驗,所以任何幫助,將不勝感激。它甚至有可能嗎?一個正在運行的應用程序可以從(迷你)轉儲文件中「恢復」嗎?
從已發佈的幾個答案中,似乎可以將遊戲狀態存儲在轉儲文件中,因此我將優化問題:我必須投入多少「膠水」才能重新創建我無法存儲的東西在轉儲文件?
我即將在我的遊戲中實現保存/加載功能,並認爲可能使用Windows的小型轉儲文件來實現此目的。我可以使用Windows的小型轉儲文件在我的遊戲中實現「保存」/「還原」嗎?
我沒有這方面的經驗,所以任何幫助,將不勝感激。它甚至有可能嗎?一個正在運行的應用程序可以從(迷你)轉儲文件中「恢復」嗎?
從已發佈的幾個答案中,似乎可以將遊戲狀態存儲在轉儲文件中,因此我將優化問題:我必須投入多少「膠水」才能重新創建我無法存儲的東西在轉儲文件?
minidump保存應用程序的所有虛擬內存和CPU狀態。到目前爲止,似乎可以從轉儲中恢復所有內容。但事實並非如此,因爲缺少處理信息:當句柄值是應用程序內存的一部分時,句柄(內核模式對象)後面的對象已被釋放或重新分配。這意味着以下無法恢復:
您將需要重新分配這些內核資源 - 要做到這一點,你需要實現一個(簽名)內核模式驅動程序。 在考慮實現內核模式驅動程序之前,我會建議考慮另一種保存和加載應用程序狀態的方法。
我的遊戲非常複雜,遊戲/模擬狀態是幾千對象很大,當然內核驅動程序很難實現,但我的(任何)應用程序大部分都是純邏輯,而不是你指定的對象。我細化了我的問題,重點關注答案的確切方面:我必須投入多少「膠水」來重新創建我無法存儲在轉儲文件中的東西? – liorda
我在說的對象是內核模式對象,而不是模擬對象。大多數編程語言都有用於保存對象或對象樹的庫。 –
如這裏指出:http://msdn.microsoft.com/en-us/library/windows/desktop/ms680369%28v=vs.85%29.aspx
內存轉儲文件用於調試的目的。你也許可以從這些文件重新創建你的遊戲環境......但是......你爲什麼不寫你自己的文件格式?
完成此操作的最佳方法是使用Recovery and Restart框架。簡而言之,當您的應用程序崩潰時,您有機會序列化應用程序重新啓動時需要的任何信息。
不,這是雷區。不建議。 –
沒有辦法從轉儲文件中「重新激活」進程。這是不可能的,因爲很多原因,托馬斯的答案如下。另一個原因是用戶可能在此期間修補了操作系統,導致轉儲文件無用。 –