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+0RPC_MESSAGE 構造体へのポインターです。
BufferBYTE*8/4+8+4ネットワークバッファー内の、データがマーシャリングまたはアンマーシャリングされる位置を指すポインターです。
BufferStartBYTE*8/4+16+8ネットワークバッファーの先頭へのポインターです。
BufferEndBYTE*8/4+24+12ネットワークバッファーの終端へのポインターです。
BufferMarkBYTE*8/4+32+16予約済みです。
BufferLengthDWORD4+40+20Buffer のサイズ (バイト単位) です。
MemorySizeDWORD4+44+24予約済みです。
MemoryBYTE*8/4+48+28予約済みです。
IsClientBYTE1+56+32予約済みです。
PadBYTE1+57+33アラインメント調整用のパディングバイト。
uFlags2WORD2+58+34追加のスタブ動作フラグ。WORD値。
ReuseBufferINT4+60+36予約済みです。
pAllocAllNodesContextNDR_ALLOC_ALL_NODES_CONTEXT*8/4+64+40予約済みです。
pPointerQueueStateNDR_POINTER_QUEUE_STATE*8/4+72+44予約済みです。
IgnoreEmbeddedPointersINT4+80+48予約済みです。
PointerBufferMarkBYTE*8/4+88+52予約済みです。
CorrDespIncrementBYTE1+96+56相関記述子のインクリメント値。BYTE値。
uFlagsBYTE1+97+57予約済みです。
UniquePtrCountWORD2+98+58ユニークポインターの数。WORD値。
MaxCountUINT_PTR8/4+104+60予約済みです。
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予約済みです。
FullPtrXlatTablesFULL_PTR_XLAT_TABLES*8/4+176+100予約済みです。
FullPtrRefIdDWORD4+184+104予約済みです。
PointerLengthDWORD4+188+108予約済みです。
_bitfieldINT4+192+112複数の内部フラグをまとめたビットフィールド。INT型。
dwDestContextDWORD4+196+116予約済みです。
pvDestContextvoid*8/4+200+120予約済みです。
SavedContextHandlesNDR_SCONTEXT**8/4+208+124予約済みです。
ParamNumberINT4+216+128予約済みです。
pRpcChannelBufferIRpcChannelBuffer*8/4+224+132予約済みです。
pArrayInfoARRAY_INFO*8/4+232+136予約済みです。
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予約済みです。
ConformanceMarkBYTE*8/4+328+184予約済みです。
VarianceMarkBYTE*8/4+336+188予約済みです。
UnusedINT_PTR8/4+344+192予約済みです。
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予約済みです。
Reserved51_5INT_PTR8/4+392+216

予約済みです。

- BackingStoreLowMark

予約済みです。

- Reserved51_1

予約済みです。

- Reserved51_2

予約済みです。

- Unused2

予約済みです。

- fInOnlyParam

予約済みです。

- fUnused

予約済みです。

公式ドキュメント

MIDL_STUB_MESSAGE 構造体は MIDL によって生成され、RPC スタブの現在の状態を保持します。アプリケーションが MIDL_STUB_MESSAGE 構造体を直接変更してはなりません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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