當應用程式取得內容值時,該值可由
XMS 轉換成另一種資料類型。系統會提供一些規則來控管支援哪些轉換,以及
XMS 要如何執行轉換。
物件的內容會有一個名稱和一個值,
其中值會有相關聯的資料類型。內容值的資料類型亦可稱為內容類型。
應用程式會使用 PropertyContext 類別的方法來取得和設定物件的內容。為了取得內容的值,
通常應用程式會呼叫適合該內容類型的方法。例如,若要取得整數內容的值,
應用程式通常會呼叫「取得整數內容」方法。
不過,當應用程式取得內容值時,該值可由
XMS 轉換成另一種資料類型。例如,若要取得整數內容的值,
應用程式可呼叫「取得字串內容」方法,而這會以字串形式來傳回內容的值。XMS 所支援的轉換顯示在表 1 中。
表 1. 支援的轉換(從內容類型至另一種資料類型)內容類型 |
支援的目標資料類型 |
String |
xmsBOOL、xmsDOUBLE、xmsFLOAT、xmsINT、xmsLONG、xmsSBYTE、xmsSHORT |
xmsBOOL |
String、xmsSBYTE、xmsINT、xmsLONG、xmsSHORT |
xmsCHAR |
String |
xmsDOUBLE |
String |
xmsFLOAT |
String、xmsDOUBLE |
xmsINT |
String、xmsLONG |
xmsLONG |
String |
xmsSBYTE |
String、xmsINT、xmsLONG、xmsSHORT |
xmsSBYTE array |
String |
xmsSHORT |
String、xmsINT、xmsLONG |
控管所支援之轉換的一般規則如下:
- 只要在轉換期間沒有資料遺失,
數值內容值可從某種資料類型轉換成另一種。例如,資料類型為 xmsINT 的內容值可轉換成資料類型為
xmsLONG 的值,但無法轉換成資料類型為 xmsSHORT 的值。
- 任何資料類型的內容值皆可轉換成字串。
- 只要對轉換而言字串的格式無誤,
字串內容值可轉換成其他任何資料類型。如果應用程式試圖轉換格式不正確的字串內容值,
XMS 會傳回 XMS_E_NUMBER_FORMAT_ERROR 錯誤碼。
- 如果應用程式試圖執行一項不支援的轉換,
XMS 會傳回
XMS_E_TYPE_CONVERSION_FAILED 錯誤碼。
將內容值從某種資料類型轉換成另一種資料類型的特定規則如下:
- 當將 Boolean 內容值轉換成字串時,值 xmsTRUE 會轉換成字串 "true",
而值 false 會轉換成字串 "false"。
- 當將 Boolean 內容值轉換成數值資料類型(包括 xmsSBYTE)時,值 xmsTRUE 會轉換成 1,
值 xmsFALSE 會轉換成字串 0。
- 當將字串內容值轉換成 Boolean 值時,字串 "true"(不區分大小寫)或 "1" 會轉換成 xmsTRUE,
字串 "false"(不區分大小寫)或 "0" 會轉換成 xmsFALSE。其他任何字串都不會轉換。
- 當將字串內容值轉換成資料類型為 xmsINT、xmsLONG、xmsSBYTE 或 xmsSHORT 的值時,
字串的格式必須是:
字串元件的意義如下:
- blanks
- 選用的前導空白字元。
- sign
- 選用的正號 (+) 或負號 (-) 字元。
- digits
- 一連串連續的數字字元 (0-9)。至少必須包含一個數字字元。
在一連串的數字字元後面,字串中可含有其他非數字的字元,
但只要到達這些字元的第一個,轉換即停止。字串會被假設代表一個十進位整數。
如果字串的格式不正確,
XMS 會傳回
XMS_E_NUMBER_FORMAT_ERROR 錯誤碼。
- 當將字串內容值轉換成資料類型為 xmsDOUBLE 或 xmsFLOAT 的值時,
字串的格式必須是:
- [blanks][sign]digits[e_char[e_sign]e_digits]
字串元件的意義如下:- blanks
- 選用的前導空白字元。
- sign
- 選用的正號 (+) 或負號 (-) 字元。
- digits
- 一連串連續的數字字元 (0-9)。至少必須包含一個數字字元。
- e_char
- 指數字元,可以是 E 或 e。
- e_sign
- 指數的正號 (+) 或負號 (-) 選用字元。
- e_digits
- 指數的一連串連續數字字元 (0-9)。如果字串含有指數字元,
則至少必須包含一個數字字元。
在一連串的數字字元後面或代表指數的選用字元後面,字串中可含有其他非數字的字元,
但只要到達這些字元的第一個,轉換即停止。字串會被假設代表一個十進位浮點數,
且其指數為 10 的次方。
如果字串的格式不正確,
XMS 會傳回
XMS_E_NUMBER_FORMAT_ERROR 錯誤碼。
- 當將數值內容值轉換成字串時(包括資料類型為 xmsSBYTE 的內容值),
會將值轉換成十進位數形式的字串表示法,
而非內含該值之 ASCII 字元的字串。例如,整數 65 會轉換成字串 "65",而非字串 "A"。
- 當將位元組陣列內容值轉換成字串時,會將每一個位元組各轉換成 2 個代表位元組的十六進位字元。例如,
位元組陣列 {0xF1, 0x12, 0x00, 0xFF} 會轉換成字串 "F11200FF"。
Property 和 PropertyContext 類別的方法皆支援內容類型至其他資料類型的轉換。不過,
C 函數 xmsPropertyGetStringByRef() 和 xmsGetStringPropertyByRef() 不會試著轉換非字串的內容值。如果應用程式呼叫這些函數以取得非字串之內容值的指標,
則 XMS 會傳回 XMS_E_TYPE_CONVERSION_FAILED 錯誤碼。