記憶體配置
應用程式必須配置此資料的記憶體;TAPI 和服務提供者會提供資料。 如果作業是非同步,除非非同步回復訊息指出成功,否則資料將無法使用。
用來在應用程式與 TAPI 之間傳遞資料的所有資料結構都會 扁平化。 也就是說,資料結構不包含子結構的指標,而子結構包含可變大小的資料元件。 相反地,用來將可變數據量傳回應用程式的資料結構必須具有下列中繼結構:
DWORD dwTotalSize;
DWORD dwNeededSize;
DWORD dwUsedSize;
<fixed size fields>
DWORD dw<VarSizeField1>Size;
DWORD dw<VarSizeField1>Offset;
<fixed size fields>
DWORD dw<VarSizeField2>Size;
DWORD dw<VarSizeField2>Offset;
<common extensions>
<var sized field1>
<var sized field2>
dwTotalSize成員是配置給這個資料結構的大小,以位元組為單位。 它會標示資料結構的結尾,並在叫用使用此資料結構的函式之前,由應用程式設定。 函式不會讀取或寫入超過此大小。 應用程式必須設定 dwTotalSize 成員,以指出配置給 TAPI 的位元組總數,以傳回 結構的內容。
TAPI 會填入 dwNeededSize 成員。 它指出傳回所有要求的資料需要多少個位元組。 存在可變大小的欄位通常使得應用程式無法估計配置所需的資料結構大小。 此欄位會傳回資料實際所需的位元組數目。 這個數位可能小於、等於或大於 dwTotalSize,而且它包含 dwTotalSize 成員本身的空間。 如果較大,則傳回的結構只會部分填滿。 如果應用程式所需的欄位可在部分結構中使用,則不需執行任何其他動作。 否則,應用程式應該至少配置 dwNeededSize 的大小,並再次叫用函式。 通常,這個時間有足夠的空間可傳回所有資訊,但大小可能會再次增加。
TAPI 會在資料傳回給應用程式時填入 dwUsedSize 成員,以表示包含實用資料之資料結構部分的實際大小,以位元組為單位。 例如,如果配置的結構太小,而截斷的欄位是可變大小的欄位, dwNeededSize 大於 dwTotalSize,而截斷的欄位則保留空白。 因此 dwUsedSize 成員可能小於 dwTotalSize。 不會傳回部分域值。
遵循此標頭是資料結構的固定部分。 其中包含描述實際可變大小欄位的一般欄位和大小/位移組。 位移欄位包含記錄開頭的可變大小欄位位元組位移。 size 欄位包含可變大小欄位的大小,以位元組為單位。 如果可變大小的欄位是空的,則大小欄位為零,且位移設定為零。 如果總結構大小不足,則會截斷的可變大小欄位為空白。 也就是說,其大小欄位會設定為零,而位移會設定為零。 可變大小的欄位會遵循固定欄位。
如果服務提供者必須填滿變數成員,TAPI 會將對應的大小和位移成員初始化為零。 如果服務提供者填入變數成員,則必須將對應的大小和位移成員設定為適當的值,包括 dwUsedSize 和 dwNeededSize 如果設定變數成員。 服務提供者不得截斷變數成員,使其符合可用空間。
服務提供者必須在結構的固定成員之後立即啟動變數成員,並在配置的記憶體結尾保留任何額外的空間,讓 TAPI 可以將其用於可變長度成員。 它可以依任何順序放置變數成員,但成員必須連續。