簡體   English   中英

CStringArray MFC 32 位序列化和 64 位反序列化

[英]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 位應用程序上讀取它。 如果我遵循CStringArrayGetSize()函數,我會看到返回值是定義如下的INT_PTR

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM