type_to_xmit関数
スタブは 、type_to_xmit 関数を呼び出して、アプリケーションによって提示される型を送信された型に変換します。 関数は次のように定義されます。
void __RPC_USER <type>_to_xmit (
<type> __RPC_FAR *, <xmit_type> __RPC_FAR * __RPC_FAR *);
最初のパラメーターは、アプリケーション データへのポインターです。 2 番目のパラメーターは、送信されたデータを指す関数によって設定されます。 関数は、送信される型のメモリを割り当てる必要があります。
次の例では、クライアントは DOUBLE_LINK_TYPE 型の [in, out] パラメーターを持つリモート プロシージャを呼び出します。 クライアント スタブは 、type_to_xmit 関数 (ここでは DOUBLE_LINK_TYPE_to_xmit) を呼び出して、リンクされたリスト データをサイズの大きな配列に変換します。
関数は、リスト内の要素の数を決定し、それらの要素を保持するのに十分な大きさの配列を割り当ててから、リスト要素を配列にコピーします。 関数が戻る前に、2 番目のパラメーター ppArray が、新しく割り当てられたデータ構造を指すように設定されます。
void __RPC_USER DOUBLE_LINK_TYPE_to_xmit (
DOUBLE_LINK_TYPE __RPC_FAR * pList,
DOUBLE_XMIT_TYPE __RPC_FAR * __RPC_FAR * ppArray)
{
short cCount = 0;
DOUBLE_LINK_TYPE * pHead = pList; // save pointer to start
DOUBLE_XMIT_TYPE * pArray;
/* count the number of elements to allocate memory */
for (; pList != NULL; pList = pList->pNext)
cCount++;
/* allocate the memory for the array */
pArray = (DOUBLE_XMIT_TYPE *) MIDL_user_allocate
(sizeof(DOUBLE_XMIT_TYPE) + (cCount * sizeof(short)));
pArray->sSize = cCount;
/* copy the linked list contents into the array */
cCount = 0;
for (i = 0, pList = pHead; pList != NULL; pList = pList->pNext)
pArray->asNumber[cCount++] = pList->sNumber;
/* return the address of the pointer to the array */
*ppArray = pArray;
}