- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
5#
發表於 2012-8-16 08:24
| 只看該作者
回復 4# Hsieh
回復 3# joey0415
原來如此, 受教了! 轉述如下:- Declare Function RegOpenKeyA Lib "advapi32.dll" (ByVal Key As Long, ByVal SubKey As String, NewKey As Long) As Long
複製代碼 在 Microsoft Visual C 和 Microsoft Visual C++ 中,前一範例會同時正確地編譯 32 位元和 64 位元。這是因為 HKEY 會定義為指標,
其大小反映程式碼編譯所在之平台的記憶體大小。
在舊版 VBA 中,並沒有特定的指標資料類型,因此會使用 Long 資料類型。此外,由於 Long 資料類型一律為 32 位元,
因此在具有 64 位元記憶體的系統上使用時,會因為截斷上方 32 位元或複寫其他記憶體位址而損毀。
這些情況會導致無法預期的行為或系統當機。
為了解決這個問題,VBA 現在包含正確的「指標」資料類型:LongPtr。此新資料類型可讓您正確地寫入原始 Declare 陳述式,如下所示:- Declare PtrSafe Function RegOpenKeyA Lib “advapire32.dll” (ByVal hKey as LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As Long
複製代碼 此資料類型和新的 PtrSafe 屬性可讓您在 32 位元或 64 位元系統上使用此 Declare 陳述式。
PtrSafe 屬性會向 VBA 編譯器指示 Declare 陳述式是針對 64 位元版本的 Office 2010。如果沒有此屬性,
在 64 位元系統中使用 Declare 陳述式會導致編譯時期錯誤。請注意,PtrSafe 屬性在 32 位元版本的 Office 2010 上為選用。
這讓現有的 Declare 陳述式可如往常般運作。 |
|