共用方式為


記憶體配置

應用程式必須配置此資料的記憶體;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 。 不會傳回部分域值。

遵循此標頭是數據結構的固定部分。 其中包含描述實際可變大小欄位的一般欄位和大小/位移組。 offset 位元段包含記錄開頭的可變大小欄位位移。 size 欄位包含可變大小欄位的大小,以位元組為單位。 如果可變大小的欄位是空的,則大小欄位為零,而位移會設定為零。 如果結構大小總計不足,則會截斷的可變大小欄位是空的。 也就是說,其大小欄位會設定為零,而位移會設定為零。 可變大小的欄位會遵循固定欄位。

如果服務提供者必須填滿變數成員,TAPI 會將對應的大小和位移成員初始化為零。 如果服務提供者填入變數成員,它就必須將對應的大小和位移成員設定為適當的值,包括 dwUsedSize,並在設定變數成員時 dwNeededSize。 服務提供者不得截斷變數成員,使其符合可用空間。

服務提供者必須在結構的固定成員之後立即啟動變數成員,並在配置記憶體的結尾留下任何額外的空間,讓TAPI可以用於可變長度成員。 它可以依任何順序放置變數成員,但成員必須連續。