![](/img/trans.png)
[英]ExpandEnvironmentStrings( … ) on a x64 bit windows is expanding %programfiles% to x86 path
[英]Windows development: x86 to x64 transition
是否有任何指導如何盡可能少地轉移到x64?
假設,我有一個用C ++編寫的windows native x86可執行文件。 EXE本身工作正常,但也有由前兩個EXE和外部x64進程托管的DLL。 使用這樣的設置,我需要重寫哪些部分?
我希望得到更一般的答案,或者可能是參考文獻的鏈接,其中給出了一些理論背景。 謝謝
一般來說,我推薦的方法是對它進行單元測試。 構建測試,以便它們全部傳遞32位實現,然后開始構建和測試64位。 值得特別注意您執行以下任何操作的代碼的任何部分:
size_t
這樣的類型,現在將是不同的大小。通過此代碼並將size_t
和long
更改為顯式32或64位typedef) 除了測試盡可能多的代碼路徑之外,確實沒有快捷方式。 這項工作的簡單程度取決於編寫代碼的可移植性。 你可能很幸運......
我發現清除錯誤的最佳方法是審核代碼中的任何代碼,執行以下任何操作並在32位世界中修復它,然后啟動端口。
對於您確實必須執行DWORD / ptr操作的情況,請將類型更改為DWORD_PTR。
我已經看到很多代碼使用CStringToPtr而不是具有適當類型的CMap <>。
所有這些東西都可能在64位上編譯(由於演員陣容沒有警告),然后在他們的臉上掉下來。 如果他們使用了正確的類型而沒有強制轉換,則代碼將首次運行。
還要檢查設置WndProc的任何子類代碼 - 您需要一個不同的標志來在64位Windows上設置它。
如果使用MFC,您也會(無益地)發現容器大小現在返回64位大小而不是32位大小計數,這意味着您的32位/ 64位存檔將被破壞。 你必須在你去的時候解決這個問題。 我們使用一些聰明的技巧創建了我們自己的自定義MFC實現,以允許我們在64位盒上反序列化32位存檔,反之亦然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.