Win32 API 日本語リファレンス
ホームSystem.Rpc › MIDL_STUB_MESSAGE

MIDL_STUB_MESSAGE

構造体
サイズx64: 400 バイト / x86: 220 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
RpcMsgRPC_MESSAGE*8/4+0+0関連するRPCメッセージへのポインター。RPC_MESSAGE。
BufferBYTE*8/4+8+4現在のマーシャリングバッファ位置へのポインター。
BufferStartBYTE*8/4+16+8マーシャリングバッファの開始位置へのポインター。
BufferEndBYTE*8/4+24+12マーシャリングバッファの終端位置へのポインター。
BufferMarkBYTE*8/4+32+16バッファ内のマーク位置へのポインター。
BufferLengthDWORD4+40+20バッファの長さをバイト単位で表す。
MemorySizeDWORD4+44+24確保されたメモリのサイズをバイト単位で表す。
MemoryBYTE*8/4+48+28アンマーシャリング先のメモリへのポインター。
IsClientBYTE1+56+32クライアント側スタブかを示すフラグ。BYTE値。
PadBYTE1+57+33アラインメント調整用のパディングバイト。
uFlags2WORD2+58+34追加のスタブ動作フラグ。WORD値。
ReuseBufferINT4+60+36バッファを再利用するかのフラグ。INT型。
pAllocAllNodesContextNDR_ALLOC_ALL_NODES_CONTEXT*8/4+64+40全ノード一括確保のコンテキストへのポインター。
pPointerQueueStateNDR_POINTER_QUEUE_STATE*8/4+72+44ポインターキューの状態へのポインター。
IgnoreEmbeddedPointersINT4+80+48埋め込みポインターを無視するかのフラグ。INT型。
PointerBufferMarkBYTE*8/4+88+52ポインターバッファのマーク位置へのポインター。
CorrDespIncrementBYTE1+96+56相関記述子のインクリメント値。BYTE値。
uFlagsBYTE1+97+57スタブ動作フラグ。BYTE値。
UniquePtrCountWORD2+98+58ユニークポインターの数。WORD値。
MaxCountUINT_PTR8/4+104+60適合配列の最大要素数。UINT_PTR型。
OffsetDWORD4+112+64可変配列のオフセット。
ActualCountDWORD4+116+68可変配列の実要素数。
pfnAllocatePFN_RPC_ALLOCATE8/4+120+72メモリ確保用のコールバック関数。
pfnFreePFN_RPC_FREE8/4+128+76メモリ解放用のコールバック関数。
StackTopBYTE*8/4+136+80スタックトップへのポインター。内部利用。
pPresentedTypeBYTE*8/4+144+84提示された型のフォーマット記述へのポインター。
pTransmitTypeBYTE*8/4+152+88送信型のフォーマット記述へのポインター。
SavedHandlevoid*8/4+160+92保存されたハンドルへのポインター。
StubDescMIDL_STUB_DESC*8/4+168+96スタブ記述子へのポインター。MIDL_STUB_DESC。
FullPtrXlatTablesFULL_PTR_XLAT_TABLES*8/4+176+100フルポインター変換テーブルへのポインター。
FullPtrRefIdDWORD4+184+104フルポインターの参照ID。
PointerLengthDWORD4+188+108ポインターデータの長さをバイト単位で表す。
_bitfieldINT4+192+112複数の内部フラグをまとめたビットフィールド。INT型。
dwDestContextDWORD4+196+116マーシャリングの宛先コンテキストを示す値。
pvDestContextvoid*8/4+200+120宛先コンテキストの追加データへのポインター。
SavedContextHandlesNDR_SCONTEXT**8/4+208+124保存されたコンテキストハンドルの配列へのポインター。
ParamNumberINT4+216+128現在処理中のパラメーター番号。INT型。
pRpcChannelBufferIRpcChannelBuffer*8/4+224+132RPCチャネルバッファインターフェイスへのポインター。
pArrayInfoARRAY_INFO*8/4+232+136配列情報へのポインター。ARRAY_INFO。
SizePtrCountArrayDWORD*8/4+240+140サイズポインターの要素数配列へのポインター。
SizePtrOffsetArrayDWORD*8/4+248+144サイズポインターのオフセット配列へのポインター。
SizePtrLengthArrayDWORD*8/4+256+148サイズポインターの長さ配列へのポインター。
pArgQueuevoid*8/4+264+152引数キューへのポインター。内部利用。
dwStubPhaseDWORD4+272+156スタブの処理フェーズを示す値。
LowStackMarkvoid*8/4+280+160スタック使用量の下限マークへのポインター。
pAsyncMsgPNDR_ASYNC_MESSAGE8/4+288+164非同期メッセージへのポインター。
pCorrInfoPNDR_CORRELATION_INFO8/4+296+168相関情報へのポインター。
pCorrMemoryBYTE*8/4+304+172相関計算用メモリへのポインター。
pMemoryListvoid*8/4+312+176確保メモリのリストへのポインター。
pCSInfoINT_PTR8/4+320+180国際化(コードセット)情報。INT_PTR型。
ConformanceMarkBYTE*8/4+328+184適合マーク位置へのポインター。
VarianceMarkBYTE*8/4+336+188可変マーク位置へのポインター。
UnusedINT_PTR8/4+344+192未使用の予約フィールド。INT_PTRサイズ。
pContext_NDR_PROC_CONTEXT*8/4+352+196プロシージャコンテキストへのポインター。内部利用。
ContextHandleHashvoid*8/4+360+200コンテキストハンドルのハッシュへのポインター。
pUserMarshalListvoid*8/4+368+204ユーザーマーシャルリストへのポインター。
pFullPtrFormatBYTE*8/4+376+208フルポインターのフォーマット記述へのポインター。
Reserved51_4INT_PTR8/4+384+212予約済みフィールド。INT_PTRサイズ。
Reserved51_5INT_PTR8/4+392+216予約済みフィールド。INT_PTRサイズ。

各言語での定義

#include <windows.h>

// MIDL_STUB_MESSAGE  (x64 400 / x86 220 バイト)
typedef struct MIDL_STUB_MESSAGE {
    RPC_MESSAGE* RpcMsg;
    BYTE* Buffer;
    BYTE* BufferStart;
    BYTE* BufferEnd;
    BYTE* BufferMark;
    DWORD BufferLength;
    DWORD MemorySize;
    BYTE* Memory;
    BYTE IsClient;
    BYTE Pad;
    WORD uFlags2;
    INT ReuseBuffer;
    NDR_ALLOC_ALL_NODES_CONTEXT* pAllocAllNodesContext;
    NDR_POINTER_QUEUE_STATE* pPointerQueueState;
    INT IgnoreEmbeddedPointers;
    BYTE* PointerBufferMark;
    BYTE CorrDespIncrement;
    BYTE uFlags;
    WORD UniquePtrCount;
    UINT_PTR MaxCount;
    DWORD Offset;
    DWORD ActualCount;
    PFN_RPC_ALLOCATE pfnAllocate;
    PFN_RPC_FREE pfnFree;
    BYTE* StackTop;
    BYTE* pPresentedType;
    BYTE* pTransmitType;
    void* SavedHandle;
    MIDL_STUB_DESC* StubDesc;
    FULL_PTR_XLAT_TABLES* FullPtrXlatTables;
    DWORD FullPtrRefId;
    DWORD PointerLength;
    INT _bitfield;
    DWORD dwDestContext;
    void* pvDestContext;
    NDR_SCONTEXT** SavedContextHandles;
    INT ParamNumber;
    IRpcChannelBuffer* pRpcChannelBuffer;
    ARRAY_INFO* pArrayInfo;
    DWORD* SizePtrCountArray;
    DWORD* SizePtrOffsetArray;
    DWORD* SizePtrLengthArray;
    void* pArgQueue;
    DWORD dwStubPhase;
    void* LowStackMark;
    PNDR_ASYNC_MESSAGE pAsyncMsg;
    PNDR_CORRELATION_INFO pCorrInfo;
    BYTE* pCorrMemory;
    void* pMemoryList;
    INT_PTR pCSInfo;
    BYTE* ConformanceMark;
    BYTE* VarianceMark;
    INT_PTR Unused;
    _NDR_PROC_CONTEXT* pContext;
    void* ContextHandleHash;
    void* pUserMarshalList;
    BYTE* pFullPtrFormat;
    INT_PTR Reserved51_4;
    INT_PTR Reserved51_5;
} MIDL_STUB_MESSAGE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIDL_STUB_MESSAGE
{
    public IntPtr RpcMsg;
    public IntPtr Buffer;
    public IntPtr BufferStart;
    public IntPtr BufferEnd;
    public IntPtr BufferMark;
    public uint BufferLength;
    public uint MemorySize;
    public IntPtr Memory;
    public byte IsClient;
    public byte Pad;
    public ushort uFlags2;
    public int ReuseBuffer;
    public IntPtr pAllocAllNodesContext;
    public IntPtr pPointerQueueState;
    public int IgnoreEmbeddedPointers;
    public IntPtr PointerBufferMark;
    public byte CorrDespIncrement;
    public byte uFlags;
    public ushort UniquePtrCount;
    public UIntPtr MaxCount;
    public uint Offset;
    public uint ActualCount;
    public IntPtr pfnAllocate;
    public IntPtr pfnFree;
    public IntPtr StackTop;
    public IntPtr pPresentedType;
    public IntPtr pTransmitType;
    public IntPtr SavedHandle;
    public IntPtr StubDesc;
    public IntPtr FullPtrXlatTables;
    public uint FullPtrRefId;
    public uint PointerLength;
    public int _bitfield;
    public uint dwDestContext;
    public IntPtr pvDestContext;
    public IntPtr SavedContextHandles;
    public int ParamNumber;
    public IntPtr pRpcChannelBuffer;
    public IntPtr pArrayInfo;
    public IntPtr SizePtrCountArray;
    public IntPtr SizePtrOffsetArray;
    public IntPtr SizePtrLengthArray;
    public IntPtr pArgQueue;
    public uint dwStubPhase;
    public IntPtr LowStackMark;
    public IntPtr pAsyncMsg;
    public IntPtr pCorrInfo;
    public IntPtr pCorrMemory;
    public IntPtr pMemoryList;
    public IntPtr pCSInfo;
    public IntPtr ConformanceMark;
    public IntPtr VarianceMark;
    public IntPtr Unused;
    public IntPtr pContext;
    public IntPtr ContextHandleHash;
    public IntPtr pUserMarshalList;
    public IntPtr pFullPtrFormat;
    public IntPtr Reserved51_4;
    public IntPtr Reserved51_5;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIDL_STUB_MESSAGE
    Public RpcMsg As IntPtr
    Public Buffer As IntPtr
    Public BufferStart As IntPtr
    Public BufferEnd As IntPtr
    Public BufferMark As IntPtr
    Public BufferLength As UInteger
    Public MemorySize As UInteger
    Public Memory As IntPtr
    Public IsClient As Byte
    Public Pad As Byte
    Public uFlags2 As UShort
    Public ReuseBuffer As Integer
    Public pAllocAllNodesContext As IntPtr
    Public pPointerQueueState As IntPtr
    Public IgnoreEmbeddedPointers As Integer
    Public PointerBufferMark As IntPtr
    Public CorrDespIncrement As Byte
    Public uFlags As Byte
    Public UniquePtrCount As UShort
    Public MaxCount As UIntPtr
    Public Offset As UInteger
    Public ActualCount As UInteger
    Public pfnAllocate As IntPtr
    Public pfnFree As IntPtr
    Public StackTop As IntPtr
    Public pPresentedType As IntPtr
    Public pTransmitType As IntPtr
    Public SavedHandle As IntPtr
    Public StubDesc As IntPtr
    Public FullPtrXlatTables As IntPtr
    Public FullPtrRefId As UInteger
    Public PointerLength As UInteger
    Public _bitfield As Integer
    Public dwDestContext As UInteger
    Public pvDestContext As IntPtr
    Public SavedContextHandles As IntPtr
    Public ParamNumber As Integer
    Public pRpcChannelBuffer As IntPtr
    Public pArrayInfo As IntPtr
    Public SizePtrCountArray As IntPtr
    Public SizePtrOffsetArray As IntPtr
    Public SizePtrLengthArray As IntPtr
    Public pArgQueue As IntPtr
    Public dwStubPhase As UInteger
    Public LowStackMark As IntPtr
    Public pAsyncMsg As IntPtr
    Public pCorrInfo As IntPtr
    Public pCorrMemory As IntPtr
    Public pMemoryList As IntPtr
    Public pCSInfo As IntPtr
    Public ConformanceMark As IntPtr
    Public VarianceMark As IntPtr
    Public Unused As IntPtr
    Public pContext As IntPtr
    Public ContextHandleHash As IntPtr
    Public pUserMarshalList As IntPtr
    Public pFullPtrFormat As IntPtr
    Public Reserved51_4 As IntPtr
    Public Reserved51_5 As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class MIDL_STUB_MESSAGE(ctypes.Structure):
    _fields_ = [
        ("RpcMsg", ctypes.c_void_p),
        ("Buffer", ctypes.c_void_p),
        ("BufferStart", ctypes.c_void_p),
        ("BufferEnd", ctypes.c_void_p),
        ("BufferMark", ctypes.c_void_p),
        ("BufferLength", wintypes.DWORD),
        ("MemorySize", wintypes.DWORD),
        ("Memory", ctypes.c_void_p),
        ("IsClient", ctypes.c_ubyte),
        ("Pad", ctypes.c_ubyte),
        ("uFlags2", ctypes.c_ushort),
        ("ReuseBuffer", ctypes.c_int),
        ("pAllocAllNodesContext", ctypes.c_void_p),
        ("pPointerQueueState", ctypes.c_void_p),
        ("IgnoreEmbeddedPointers", ctypes.c_int),
        ("PointerBufferMark", ctypes.c_void_p),
        ("CorrDespIncrement", ctypes.c_ubyte),
        ("uFlags", ctypes.c_ubyte),
        ("UniquePtrCount", ctypes.c_ushort),
        ("MaxCount", ctypes.c_size_t),
        ("Offset", wintypes.DWORD),
        ("ActualCount", wintypes.DWORD),
        ("pfnAllocate", ctypes.c_void_p),
        ("pfnFree", ctypes.c_void_p),
        ("StackTop", ctypes.c_void_p),
        ("pPresentedType", ctypes.c_void_p),
        ("pTransmitType", ctypes.c_void_p),
        ("SavedHandle", ctypes.c_void_p),
        ("StubDesc", ctypes.c_void_p),
        ("FullPtrXlatTables", ctypes.c_void_p),
        ("FullPtrRefId", wintypes.DWORD),
        ("PointerLength", wintypes.DWORD),
        ("_bitfield", ctypes.c_int),
        ("dwDestContext", wintypes.DWORD),
        ("pvDestContext", ctypes.c_void_p),
        ("SavedContextHandles", ctypes.c_void_p),
        ("ParamNumber", ctypes.c_int),
        ("pRpcChannelBuffer", ctypes.c_void_p),
        ("pArrayInfo", ctypes.c_void_p),
        ("SizePtrCountArray", ctypes.c_void_p),
        ("SizePtrOffsetArray", ctypes.c_void_p),
        ("SizePtrLengthArray", ctypes.c_void_p),
        ("pArgQueue", ctypes.c_void_p),
        ("dwStubPhase", wintypes.DWORD),
        ("LowStackMark", ctypes.c_void_p),
        ("pAsyncMsg", ctypes.c_ssize_t),
        ("pCorrInfo", ctypes.c_ssize_t),
        ("pCorrMemory", ctypes.c_void_p),
        ("pMemoryList", ctypes.c_void_p),
        ("pCSInfo", ctypes.c_ssize_t),
        ("ConformanceMark", ctypes.c_void_p),
        ("VarianceMark", ctypes.c_void_p),
        ("Unused", ctypes.c_ssize_t),
        ("pContext", ctypes.c_void_p),
        ("ContextHandleHash", ctypes.c_void_p),
        ("pUserMarshalList", ctypes.c_void_p),
        ("pFullPtrFormat", ctypes.c_void_p),
        ("Reserved51_4", ctypes.c_ssize_t),
        ("Reserved51_5", ctypes.c_ssize_t),
    ]
#[repr(C)]
pub struct MIDL_STUB_MESSAGE {
    pub RpcMsg: *mut core::ffi::c_void,
    pub Buffer: *mut core::ffi::c_void,
    pub BufferStart: *mut core::ffi::c_void,
    pub BufferEnd: *mut core::ffi::c_void,
    pub BufferMark: *mut core::ffi::c_void,
    pub BufferLength: u32,
    pub MemorySize: u32,
    pub Memory: *mut core::ffi::c_void,
    pub IsClient: u8,
    pub Pad: u8,
    pub uFlags2: u16,
    pub ReuseBuffer: i32,
    pub pAllocAllNodesContext: *mut core::ffi::c_void,
    pub pPointerQueueState: *mut core::ffi::c_void,
    pub IgnoreEmbeddedPointers: i32,
    pub PointerBufferMark: *mut core::ffi::c_void,
    pub CorrDespIncrement: u8,
    pub uFlags: u8,
    pub UniquePtrCount: u16,
    pub MaxCount: usize,
    pub Offset: u32,
    pub ActualCount: u32,
    pub pfnAllocate: *mut core::ffi::c_void,
    pub pfnFree: *mut core::ffi::c_void,
    pub StackTop: *mut core::ffi::c_void,
    pub pPresentedType: *mut core::ffi::c_void,
    pub pTransmitType: *mut core::ffi::c_void,
    pub SavedHandle: *mut core::ffi::c_void,
    pub StubDesc: *mut core::ffi::c_void,
    pub FullPtrXlatTables: *mut core::ffi::c_void,
    pub FullPtrRefId: u32,
    pub PointerLength: u32,
    pub _bitfield: i32,
    pub dwDestContext: u32,
    pub pvDestContext: *mut core::ffi::c_void,
    pub SavedContextHandles: *mut core::ffi::c_void,
    pub ParamNumber: i32,
    pub pRpcChannelBuffer: *mut core::ffi::c_void,
    pub pArrayInfo: *mut core::ffi::c_void,
    pub SizePtrCountArray: *mut core::ffi::c_void,
    pub SizePtrOffsetArray: *mut core::ffi::c_void,
    pub SizePtrLengthArray: *mut core::ffi::c_void,
    pub pArgQueue: *mut core::ffi::c_void,
    pub dwStubPhase: u32,
    pub LowStackMark: *mut core::ffi::c_void,
    pub pAsyncMsg: isize,
    pub pCorrInfo: isize,
    pub pCorrMemory: *mut core::ffi::c_void,
    pub pMemoryList: *mut core::ffi::c_void,
    pub pCSInfo: isize,
    pub ConformanceMark: *mut core::ffi::c_void,
    pub VarianceMark: *mut core::ffi::c_void,
    pub Unused: isize,
    pub pContext: *mut core::ffi::c_void,
    pub ContextHandleHash: *mut core::ffi::c_void,
    pub pUserMarshalList: *mut core::ffi::c_void,
    pub pFullPtrFormat: *mut core::ffi::c_void,
    pub Reserved51_4: isize,
    pub Reserved51_5: isize,
}
import "golang.org/x/sys/windows"

type MIDL_STUB_MESSAGE struct {
	RpcMsg uintptr
	Buffer uintptr
	BufferStart uintptr
	BufferEnd uintptr
	BufferMark uintptr
	BufferLength uint32
	MemorySize uint32
	Memory uintptr
	IsClient byte
	Pad byte
	uFlags2 uint16
	ReuseBuffer int32
	pAllocAllNodesContext uintptr
	pPointerQueueState uintptr
	IgnoreEmbeddedPointers int32
	PointerBufferMark uintptr
	CorrDespIncrement byte
	uFlags byte
	UniquePtrCount uint16
	MaxCount uintptr
	Offset uint32
	ActualCount uint32
	pfnAllocate uintptr
	pfnFree uintptr
	StackTop uintptr
	pPresentedType uintptr
	pTransmitType uintptr
	SavedHandle uintptr
	StubDesc uintptr
	FullPtrXlatTables uintptr
	FullPtrRefId uint32
	PointerLength uint32
	_bitfield int32
	dwDestContext uint32
	pvDestContext uintptr
	SavedContextHandles uintptr
	ParamNumber int32
	pRpcChannelBuffer uintptr
	pArrayInfo uintptr
	SizePtrCountArray uintptr
	SizePtrOffsetArray uintptr
	SizePtrLengthArray uintptr
	pArgQueue uintptr
	dwStubPhase uint32
	LowStackMark uintptr
	pAsyncMsg uintptr
	pCorrInfo uintptr
	pCorrMemory uintptr
	pMemoryList uintptr
	pCSInfo uintptr
	ConformanceMark uintptr
	VarianceMark uintptr
	Unused uintptr
	pContext uintptr
	ContextHandleHash uintptr
	pUserMarshalList uintptr
	pFullPtrFormat uintptr
	Reserved51_4 uintptr
	Reserved51_5 uintptr
}
type
  MIDL_STUB_MESSAGE = record
    RpcMsg: Pointer;
    Buffer: Pointer;
    BufferStart: Pointer;
    BufferEnd: Pointer;
    BufferMark: Pointer;
    BufferLength: DWORD;
    MemorySize: DWORD;
    Memory: Pointer;
    IsClient: Byte;
    Pad: Byte;
    uFlags2: Word;
    ReuseBuffer: Integer;
    pAllocAllNodesContext: Pointer;
    pPointerQueueState: Pointer;
    IgnoreEmbeddedPointers: Integer;
    PointerBufferMark: Pointer;
    CorrDespIncrement: Byte;
    uFlags: Byte;
    UniquePtrCount: Word;
    MaxCount: NativeUInt;
    Offset: DWORD;
    ActualCount: DWORD;
    pfnAllocate: Pointer;
    pfnFree: Pointer;
    StackTop: Pointer;
    pPresentedType: Pointer;
    pTransmitType: Pointer;
    SavedHandle: Pointer;
    StubDesc: Pointer;
    FullPtrXlatTables: Pointer;
    FullPtrRefId: DWORD;
    PointerLength: DWORD;
    _bitfield: Integer;
    dwDestContext: DWORD;
    pvDestContext: Pointer;
    SavedContextHandles: Pointer;
    ParamNumber: Integer;
    pRpcChannelBuffer: Pointer;
    pArrayInfo: Pointer;
    SizePtrCountArray: Pointer;
    SizePtrOffsetArray: Pointer;
    SizePtrLengthArray: Pointer;
    pArgQueue: Pointer;
    dwStubPhase: DWORD;
    LowStackMark: Pointer;
    pAsyncMsg: NativeInt;
    pCorrInfo: NativeInt;
    pCorrMemory: Pointer;
    pMemoryList: Pointer;
    pCSInfo: NativeInt;
    ConformanceMark: Pointer;
    VarianceMark: Pointer;
    Unused: NativeInt;
    pContext: Pointer;
    ContextHandleHash: Pointer;
    pUserMarshalList: Pointer;
    pFullPtrFormat: Pointer;
    Reserved51_4: NativeInt;
    Reserved51_5: NativeInt;
  end;
const MIDL_STUB_MESSAGE = extern struct {
    RpcMsg: ?*anyopaque,
    Buffer: ?*anyopaque,
    BufferStart: ?*anyopaque,
    BufferEnd: ?*anyopaque,
    BufferMark: ?*anyopaque,
    BufferLength: u32,
    MemorySize: u32,
    Memory: ?*anyopaque,
    IsClient: u8,
    Pad: u8,
    uFlags2: u16,
    ReuseBuffer: i32,
    pAllocAllNodesContext: ?*anyopaque,
    pPointerQueueState: ?*anyopaque,
    IgnoreEmbeddedPointers: i32,
    PointerBufferMark: ?*anyopaque,
    CorrDespIncrement: u8,
    uFlags: u8,
    UniquePtrCount: u16,
    MaxCount: usize,
    Offset: u32,
    ActualCount: u32,
    pfnAllocate: ?*anyopaque,
    pfnFree: ?*anyopaque,
    StackTop: ?*anyopaque,
    pPresentedType: ?*anyopaque,
    pTransmitType: ?*anyopaque,
    SavedHandle: ?*anyopaque,
    StubDesc: ?*anyopaque,
    FullPtrXlatTables: ?*anyopaque,
    FullPtrRefId: u32,
    PointerLength: u32,
    _bitfield: i32,
    dwDestContext: u32,
    pvDestContext: ?*anyopaque,
    SavedContextHandles: ?*anyopaque,
    ParamNumber: i32,
    pRpcChannelBuffer: ?*anyopaque,
    pArrayInfo: ?*anyopaque,
    SizePtrCountArray: ?*anyopaque,
    SizePtrOffsetArray: ?*anyopaque,
    SizePtrLengthArray: ?*anyopaque,
    pArgQueue: ?*anyopaque,
    dwStubPhase: u32,
    LowStackMark: ?*anyopaque,
    pAsyncMsg: isize,
    pCorrInfo: isize,
    pCorrMemory: ?*anyopaque,
    pMemoryList: ?*anyopaque,
    pCSInfo: isize,
    ConformanceMark: ?*anyopaque,
    VarianceMark: ?*anyopaque,
    Unused: isize,
    pContext: ?*anyopaque,
    ContextHandleHash: ?*anyopaque,
    pUserMarshalList: ?*anyopaque,
    pFullPtrFormat: ?*anyopaque,
    Reserved51_4: isize,
    Reserved51_5: isize,
};
type
  MIDL_STUB_MESSAGE {.bycopy.} = object
    RpcMsg: pointer
    Buffer: pointer
    BufferStart: pointer
    BufferEnd: pointer
    BufferMark: pointer
    BufferLength: uint32
    MemorySize: uint32
    Memory: pointer
    IsClient: uint8
    Pad: uint8
    uFlags2: uint16
    ReuseBuffer: int32
    pAllocAllNodesContext: pointer
    pPointerQueueState: pointer
    IgnoreEmbeddedPointers: int32
    PointerBufferMark: pointer
    CorrDespIncrement: uint8
    uFlags: uint8
    UniquePtrCount: uint16
    MaxCount: uint
    Offset: uint32
    ActualCount: uint32
    pfnAllocate: pointer
    pfnFree: pointer
    StackTop: pointer
    pPresentedType: pointer
    pTransmitType: pointer
    SavedHandle: pointer
    StubDesc: pointer
    FullPtrXlatTables: pointer
    FullPtrRefId: uint32
    PointerLength: uint32
    _bitfield: int32
    dwDestContext: uint32
    pvDestContext: pointer
    SavedContextHandles: pointer
    ParamNumber: int32
    pRpcChannelBuffer: pointer
    pArrayInfo: pointer
    SizePtrCountArray: pointer
    SizePtrOffsetArray: pointer
    SizePtrLengthArray: pointer
    pArgQueue: pointer
    dwStubPhase: uint32
    LowStackMark: pointer
    pAsyncMsg: int
    pCorrInfo: int
    pCorrMemory: pointer
    pMemoryList: pointer
    pCSInfo: int
    ConformanceMark: pointer
    VarianceMark: pointer
    Unused: int
    pContext: pointer
    ContextHandleHash: pointer
    pUserMarshalList: pointer
    pFullPtrFormat: pointer
    Reserved51_4: int
    Reserved51_5: int
struct MIDL_STUB_MESSAGE
{
    void* RpcMsg;
    void* Buffer;
    void* BufferStart;
    void* BufferEnd;
    void* BufferMark;
    uint BufferLength;
    uint MemorySize;
    void* Memory;
    ubyte IsClient;
    ubyte Pad;
    ushort uFlags2;
    int ReuseBuffer;
    void* pAllocAllNodesContext;
    void* pPointerQueueState;
    int IgnoreEmbeddedPointers;
    void* PointerBufferMark;
    ubyte CorrDespIncrement;
    ubyte uFlags;
    ushort UniquePtrCount;
    size_t MaxCount;
    uint Offset;
    uint ActualCount;
    void* pfnAllocate;
    void* pfnFree;
    void* StackTop;
    void* pPresentedType;
    void* pTransmitType;
    void* SavedHandle;
    void* StubDesc;
    void* FullPtrXlatTables;
    uint FullPtrRefId;
    uint PointerLength;
    int _bitfield;
    uint dwDestContext;
    void* pvDestContext;
    void* SavedContextHandles;
    int ParamNumber;
    void* pRpcChannelBuffer;
    void* pArrayInfo;
    void* SizePtrCountArray;
    void* SizePtrOffsetArray;
    void* SizePtrLengthArray;
    void* pArgQueue;
    uint dwStubPhase;
    void* LowStackMark;
    ptrdiff_t pAsyncMsg;
    ptrdiff_t pCorrInfo;
    void* pCorrMemory;
    void* pMemoryList;
    ptrdiff_t pCSInfo;
    void* ConformanceMark;
    void* VarianceMark;
    ptrdiff_t Unused;
    void* pContext;
    void* ContextHandleHash;
    void* pUserMarshalList;
    void* pFullPtrFormat;
    ptrdiff_t Reserved51_4;
    ptrdiff_t Reserved51_5;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MIDL_STUB_MESSAGE サイズ: 220 バイト(x86)
dim st, 55    ; 4byte整数×55(構造体サイズ 220 / 4 切り上げ)
; RpcMsg : RPC_MESSAGE* (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; Buffer : BYTE* (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; BufferStart : BYTE* (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; BufferEnd : BYTE* (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; BufferMark : BYTE* (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; BufferLength : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; MemorySize : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; Memory : BYTE* (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; IsClient : BYTE (+32, 1byte)  poke st,32,値  /  値 = peek(st,32)
; Pad : BYTE (+33, 1byte)  poke st,33,値  /  値 = peek(st,33)
; uFlags2 : WORD (+34, 2byte)  wpoke st,34,値  /  値 = wpeek(st,34)
; ReuseBuffer : INT (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; pAllocAllNodesContext : NDR_ALLOC_ALL_NODES_CONTEXT* (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; pPointerQueueState : NDR_POINTER_QUEUE_STATE* (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; IgnoreEmbeddedPointers : INT (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; PointerBufferMark : BYTE* (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; CorrDespIncrement : BYTE (+56, 1byte)  poke st,56,値  /  値 = peek(st,56)
; uFlags : BYTE (+57, 1byte)  poke st,57,値  /  値 = peek(st,57)
; UniquePtrCount : WORD (+58, 2byte)  wpoke st,58,値  /  値 = wpeek(st,58)
; MaxCount : UINT_PTR (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; Offset : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ActualCount : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; pfnAllocate : PFN_RPC_ALLOCATE (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; pfnFree : PFN_RPC_FREE (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; StackTop : BYTE* (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; pPresentedType : BYTE* (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; pTransmitType : BYTE* (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; SavedHandle : void* (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; StubDesc : MIDL_STUB_DESC* (+96, 4byte)  varptr(st)+96 を基点に操作(4byte:入れ子/配列)
; FullPtrXlatTables : FULL_PTR_XLAT_TABLES* (+100, 4byte)  varptr(st)+100 を基点に操作(4byte:入れ子/配列)
; FullPtrRefId : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; PointerLength : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; _bitfield : INT (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; dwDestContext : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; pvDestContext : void* (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; SavedContextHandles : NDR_SCONTEXT** (+124, 4byte)  varptr(st)+124 を基点に操作(4byte:入れ子/配列)
; ParamNumber : INT (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; pRpcChannelBuffer : IRpcChannelBuffer* (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; pArrayInfo : ARRAY_INFO* (+136, 4byte)  varptr(st)+136 を基点に操作(4byte:入れ子/配列)
; SizePtrCountArray : DWORD* (+140, 4byte)  st.35 = 値  /  値 = st.35   (lpoke/lpeek も可)
; SizePtrOffsetArray : DWORD* (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; SizePtrLengthArray : DWORD* (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; pArgQueue : void* (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; dwStubPhase : DWORD (+156, 4byte)  st.39 = 値  /  値 = st.39   (lpoke/lpeek も可)
; LowStackMark : void* (+160, 4byte)  st.40 = 値  /  値 = st.40   (lpoke/lpeek も可)
; pAsyncMsg : PNDR_ASYNC_MESSAGE (+164, 4byte)  st.41 = 値  /  値 = st.41   (lpoke/lpeek も可)
; pCorrInfo : PNDR_CORRELATION_INFO (+168, 4byte)  st.42 = 値  /  値 = st.42   (lpoke/lpeek も可)
; pCorrMemory : BYTE* (+172, 4byte)  st.43 = 値  /  値 = st.43   (lpoke/lpeek も可)
; pMemoryList : void* (+176, 4byte)  st.44 = 値  /  値 = st.44   (lpoke/lpeek も可)
; pCSInfo : INT_PTR (+180, 4byte)  st.45 = 値  /  値 = st.45   (lpoke/lpeek も可)
; ConformanceMark : BYTE* (+184, 4byte)  st.46 = 値  /  値 = st.46   (lpoke/lpeek も可)
; VarianceMark : BYTE* (+188, 4byte)  st.47 = 値  /  値 = st.47   (lpoke/lpeek も可)
; Unused : INT_PTR (+192, 4byte)  st.48 = 値  /  値 = st.48   (lpoke/lpeek も可)
; pContext : _NDR_PROC_CONTEXT* (+196, 4byte)  st.49 = 値  /  値 = st.49   (lpoke/lpeek も可)
; ContextHandleHash : void* (+200, 4byte)  st.50 = 値  /  値 = st.50   (lpoke/lpeek も可)
; pUserMarshalList : void* (+204, 4byte)  st.51 = 値  /  値 = st.51   (lpoke/lpeek も可)
; pFullPtrFormat : BYTE* (+208, 4byte)  st.52 = 値  /  値 = st.52   (lpoke/lpeek も可)
; Reserved51_4 : INT_PTR (+212, 4byte)  st.53 = 値  /  値 = st.53   (lpoke/lpeek も可)
; Reserved51_5 : INT_PTR (+216, 4byte)  st.54 = 値  /  値 = st.54   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MIDL_STUB_MESSAGE サイズ: 400 バイト(x64)
dim st, 100    ; 4byte整数×100(構造体サイズ 400 / 4 切り上げ)
; RpcMsg : RPC_MESSAGE* (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; Buffer : BYTE* (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; BufferStart : BYTE* (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; BufferEnd : BYTE* (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; BufferMark : BYTE* (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; BufferLength : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; MemorySize : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; Memory : BYTE* (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; IsClient : BYTE (+56, 1byte)  poke st,56,値  /  値 = peek(st,56)
; Pad : BYTE (+57, 1byte)  poke st,57,値  /  値 = peek(st,57)
; uFlags2 : WORD (+58, 2byte)  wpoke st,58,値  /  値 = wpeek(st,58)
; ReuseBuffer : INT (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; pAllocAllNodesContext : NDR_ALLOC_ALL_NODES_CONTEXT* (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; pPointerQueueState : NDR_POINTER_QUEUE_STATE* (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; IgnoreEmbeddedPointers : INT (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; PointerBufferMark : BYTE* (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; CorrDespIncrement : BYTE (+96, 1byte)  poke st,96,値  /  値 = peek(st,96)
; uFlags : BYTE (+97, 1byte)  poke st,97,値  /  値 = peek(st,97)
; UniquePtrCount : WORD (+98, 2byte)  wpoke st,98,値  /  値 = wpeek(st,98)
; MaxCount : UINT_PTR (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; Offset : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ActualCount : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; pfnAllocate : PFN_RPC_ALLOCATE (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; pfnFree : PFN_RPC_FREE (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; StackTop : BYTE* (+136, 8byte)  qpoke st,136,値 / qpeek(st,136)  ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; pPresentedType : BYTE* (+144, 8byte)  qpoke st,144,値 / qpeek(st,144)  ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; pTransmitType : BYTE* (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; SavedHandle : void* (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; StubDesc : MIDL_STUB_DESC* (+168, 8byte)  varptr(st)+168 を基点に操作(8byte:入れ子/配列)
; FullPtrXlatTables : FULL_PTR_XLAT_TABLES* (+176, 8byte)  varptr(st)+176 を基点に操作(8byte:入れ子/配列)
; FullPtrRefId : DWORD (+184, 4byte)  st.46 = 値  /  値 = st.46   (lpoke/lpeek も可)
; PointerLength : DWORD (+188, 4byte)  st.47 = 値  /  値 = st.47   (lpoke/lpeek も可)
; _bitfield : INT (+192, 4byte)  st.48 = 値  /  値 = st.48   (lpoke/lpeek も可)
; dwDestContext : DWORD (+196, 4byte)  st.49 = 値  /  値 = st.49   (lpoke/lpeek も可)
; pvDestContext : void* (+200, 8byte)  qpoke st,200,値 / qpeek(st,200)  ※IronHSPのみ。3.7/3.8は lpoke st,200,下位 : lpoke st,204,上位
; SavedContextHandles : NDR_SCONTEXT** (+208, 8byte)  varptr(st)+208 を基点に操作(8byte:入れ子/配列)
; ParamNumber : INT (+216, 4byte)  st.54 = 値  /  値 = st.54   (lpoke/lpeek も可)
; pRpcChannelBuffer : IRpcChannelBuffer* (+224, 8byte)  qpoke st,224,値 / qpeek(st,224)  ※IronHSPのみ。3.7/3.8は lpoke st,224,下位 : lpoke st,228,上位
; pArrayInfo : ARRAY_INFO* (+232, 8byte)  varptr(st)+232 を基点に操作(8byte:入れ子/配列)
; SizePtrCountArray : DWORD* (+240, 8byte)  qpoke st,240,値 / qpeek(st,240)  ※IronHSPのみ。3.7/3.8は lpoke st,240,下位 : lpoke st,244,上位
; SizePtrOffsetArray : DWORD* (+248, 8byte)  qpoke st,248,値 / qpeek(st,248)  ※IronHSPのみ。3.7/3.8は lpoke st,248,下位 : lpoke st,252,上位
; SizePtrLengthArray : DWORD* (+256, 8byte)  qpoke st,256,値 / qpeek(st,256)  ※IronHSPのみ。3.7/3.8は lpoke st,256,下位 : lpoke st,260,上位
; pArgQueue : void* (+264, 8byte)  qpoke st,264,値 / qpeek(st,264)  ※IronHSPのみ。3.7/3.8は lpoke st,264,下位 : lpoke st,268,上位
; dwStubPhase : DWORD (+272, 4byte)  st.68 = 値  /  値 = st.68   (lpoke/lpeek も可)
; LowStackMark : void* (+280, 8byte)  qpoke st,280,値 / qpeek(st,280)  ※IronHSPのみ。3.7/3.8は lpoke st,280,下位 : lpoke st,284,上位
; pAsyncMsg : PNDR_ASYNC_MESSAGE (+288, 8byte)  qpoke st,288,値 / qpeek(st,288)  ※IronHSPのみ。3.7/3.8は lpoke st,288,下位 : lpoke st,292,上位
; pCorrInfo : PNDR_CORRELATION_INFO (+296, 8byte)  qpoke st,296,値 / qpeek(st,296)  ※IronHSPのみ。3.7/3.8は lpoke st,296,下位 : lpoke st,300,上位
; pCorrMemory : BYTE* (+304, 8byte)  qpoke st,304,値 / qpeek(st,304)  ※IronHSPのみ。3.7/3.8は lpoke st,304,下位 : lpoke st,308,上位
; pMemoryList : void* (+312, 8byte)  qpoke st,312,値 / qpeek(st,312)  ※IronHSPのみ。3.7/3.8は lpoke st,312,下位 : lpoke st,316,上位
; pCSInfo : INT_PTR (+320, 8byte)  qpoke st,320,値 / qpeek(st,320)  ※IronHSPのみ。3.7/3.8は lpoke st,320,下位 : lpoke st,324,上位
; ConformanceMark : BYTE* (+328, 8byte)  qpoke st,328,値 / qpeek(st,328)  ※IronHSPのみ。3.7/3.8は lpoke st,328,下位 : lpoke st,332,上位
; VarianceMark : BYTE* (+336, 8byte)  qpoke st,336,値 / qpeek(st,336)  ※IronHSPのみ。3.7/3.8は lpoke st,336,下位 : lpoke st,340,上位
; Unused : INT_PTR (+344, 8byte)  qpoke st,344,値 / qpeek(st,344)  ※IronHSPのみ。3.7/3.8は lpoke st,344,下位 : lpoke st,348,上位
; pContext : _NDR_PROC_CONTEXT* (+352, 8byte)  qpoke st,352,値 / qpeek(st,352)  ※IronHSPのみ。3.7/3.8は lpoke st,352,下位 : lpoke st,356,上位
; ContextHandleHash : void* (+360, 8byte)  qpoke st,360,値 / qpeek(st,360)  ※IronHSPのみ。3.7/3.8は lpoke st,360,下位 : lpoke st,364,上位
; pUserMarshalList : void* (+368, 8byte)  qpoke st,368,値 / qpeek(st,368)  ※IronHSPのみ。3.7/3.8は lpoke st,368,下位 : lpoke st,372,上位
; pFullPtrFormat : BYTE* (+376, 8byte)  qpoke st,376,値 / qpeek(st,376)  ※IronHSPのみ。3.7/3.8は lpoke st,376,下位 : lpoke st,380,上位
; Reserved51_4 : INT_PTR (+384, 8byte)  qpoke st,384,値 / qpeek(st,384)  ※IronHSPのみ。3.7/3.8は lpoke st,384,下位 : lpoke st,388,上位
; Reserved51_5 : INT_PTR (+392, 8byte)  qpoke st,392,値 / qpeek(st,392)  ※IronHSPのみ。3.7/3.8は lpoke st,392,下位 : lpoke st,396,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MIDL_STUB_MESSAGE
    #field intptr RpcMsg
    #field intptr Buffer
    #field intptr BufferStart
    #field intptr BufferEnd
    #field intptr BufferMark
    #field int BufferLength
    #field int MemorySize
    #field intptr Memory
    #field byte IsClient
    #field byte Pad
    #field short uFlags2
    #field int ReuseBuffer
    #field intptr pAllocAllNodesContext
    #field intptr pPointerQueueState
    #field int IgnoreEmbeddedPointers
    #field intptr PointerBufferMark
    #field byte CorrDespIncrement
    #field byte uFlags
    #field short UniquePtrCount
    #field intptr MaxCount
    #field int Offset
    #field int ActualCount
    #field intptr pfnAllocate
    #field intptr pfnFree
    #field intptr StackTop
    #field intptr pPresentedType
    #field intptr pTransmitType
    #field intptr SavedHandle
    #field intptr StubDesc
    #field intptr FullPtrXlatTables
    #field int FullPtrRefId
    #field int PointerLength
    #field int _bitfield
    #field int dwDestContext
    #field intptr pvDestContext
    #field intptr SavedContextHandles
    #field int ParamNumber
    #field intptr pRpcChannelBuffer
    #field intptr pArrayInfo
    #field intptr SizePtrCountArray
    #field intptr SizePtrOffsetArray
    #field intptr SizePtrLengthArray
    #field intptr pArgQueue
    #field int dwStubPhase
    #field intptr LowStackMark
    #field intptr pAsyncMsg
    #field intptr pCorrInfo
    #field intptr pCorrMemory
    #field intptr pMemoryList
    #field intptr pCSInfo
    #field intptr ConformanceMark
    #field intptr VarianceMark
    #field intptr Unused
    #field intptr pContext
    #field intptr ContextHandleHash
    #field intptr pUserMarshalList
    #field intptr pFullPtrFormat
    #field intptr Reserved51_4
    #field intptr Reserved51_5
#endstruct

stdim st, MIDL_STUB_MESSAGE        ; NSTRUCT 変数を確保
st->BufferLength = 100
mes "BufferLength=" + st->BufferLength