在 Web 服務中使用複式類型時,其規則和簡式類型相同。
下列範例顯示從屬於複式類型的 WSDL 所產生的類別。如本範例中所示, 複式類型在使用 set 和 get 方法時,只會採用資料的表層副本。
class STORAGE_CLASS_INFO ComplexType { public: class xsd__string Message; class xsd__int MessageSize; xsd__string getMessage(); void setMessage( xsd__string InValue); xsd__int getMessageSize(); void setMessageSize( xsd__int InValue);
用戶端必須記住,在使用指向物件的指標時, 只會複製指標,而不會製作指標的複本。比方說,如果複式類型包含字串, 用戶端可以藉由建立本端字串,然後在複式物件中使用 set 方法來將該字串複製到物件中, 以設定字串的內容。
下列範例顯示在使用複式類型時可以套用的限制:
xsd__int iStringLength = strlen( “Hello World”); xsd_string myNewString = new char[iStringLength + 1]; strcpy( myNewString, “Hello World”); myComplexType.setMessage( myNewString); delete myNewString; // 執行這個動作時,myComplexType.Message 將指向 // 無效的記憶體。
另一種方式是:
delete myComplexType; // 執行這個動作時,myNewMessage 將指向無效的 記憶體。
在方法呼叫中使用複式類型的參數時,適用的規則與簡式類型的規則相同。以下是這些規則:
ComplexType * myNewComplexType = new ComplexType( myExistingComplexType);
這個指令 會從原始物件中取用所有成員變數的深層副本,以移入新的物件。
如果 WSDL 說明在陣列中使用的複式類型, WSDL2Ws 工具會使用字尾為 "_Array" 的複式名稱類型, 來產生對應的陣列物件。