![](/img/trans.png)
[英]Boost serialization does not work between 32bit and 64bit machine. Any other serialization / compression library?
[英]CStringArray MFC serialization on 32bit and deserialization on 64 bit
我在將 MFC 應用程序從 32 位移植到 64 位時遇到了很多困難。 我有與CStringArray
成員相同的類,它們使用CArchive
序列化,並且在 32 位應用程序中都可以正常工作。
現在我將同一個應用程序分成兩部分,一個是 32 位的,另一個是 64 位的,它們需要共享一些序列化數據; 當我序列化一個CStringArray
成員並嘗試在 64 位應用程序中反序列化它時,我得到一個CArchiveException
, cause=3 應該是“ endOfFile
”。
目前尚不清楚發生了什么,我懷疑由於大小原因我無法將其序列化為 32 位數據並在 64 位應用程序上讀取它。 如果我遵循CStringArray
的GetSize()
函數,我會看到返回值是定義如下的INT_PTR
:
這意味着沒有辦法在 32 位上進行CStringArray
序列化並在 64 位上進行反序列化? 存在解決方法或類似的方法嗎? 在 32 位和 64 位應用程序之間,我應該檢查其他 MFC 數據嗎?
編輯:問題與 CStringArray 嚴格無關,(請參閱評論)在 32/64 之間很好。
我為未來的讀者回答我的問題。 問題與 CStringArray 無關,而是與它附近的代碼的其他部分有關。 問題是在 CStringArray obj 之前還有另一個成員是自定義結構的 CArray。 該結構有幾個成員,它們使用CArchive SerializeElements
函數的重寫來在 32 位中進行正確的數據序列化。
這個序列化元素是這樣寫的:
template<class TYPE> void AFXAPI SerializeElements (CArchive& ar, CRect* pElements, int nCount);
但是 64 位版本不使用此覆蓋,因為最后一個參數是int
而不是INT_PTR
並且沒有使用 SerializeElements,我進行了錯誤的序列化(需要的字節更少,這就是為什么我在閱讀時很快到達 endOfFile 的原因)。
要修復它,只需對 SerializeElements 使用正確的聲明即可:
template<class TYPE> void AFXAPI SerializeElements (CArchive& ar, CRect* pElements, **INT_PTR** nCount);
希望能有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.