ホーム › System.Rpc › MIDL_STUB_MESSAGE
MIDL_STUB_MESSAGE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| RpcMsg | RPC_MESSAGE* | 8/4 | +0 | +0 | 関連するRPCメッセージへのポインター。RPC_MESSAGE。 |
| Buffer | BYTE* | 8/4 | +8 | +4 | 現在のマーシャリングバッファ位置へのポインター。 |
| BufferStart | BYTE* | 8/4 | +16 | +8 | マーシャリングバッファの開始位置へのポインター。 |
| BufferEnd | BYTE* | 8/4 | +24 | +12 | マーシャリングバッファの終端位置へのポインター。 |
| BufferMark | BYTE* | 8/4 | +32 | +16 | バッファ内のマーク位置へのポインター。 |
| BufferLength | DWORD | 4 | +40 | +20 | バッファの長さをバイト単位で表す。 |
| MemorySize | DWORD | 4 | +44 | +24 | 確保されたメモリのサイズをバイト単位で表す。 |
| Memory | BYTE* | 8/4 | +48 | +28 | アンマーシャリング先のメモリへのポインター。 |
| IsClient | BYTE | 1 | +56 | +32 | クライアント側スタブかを示すフラグ。BYTE値。 |
| Pad | BYTE | 1 | +57 | +33 | アラインメント調整用のパディングバイト。 |
| uFlags2 | WORD | 2 | +58 | +34 | 追加のスタブ動作フラグ。WORD値。 |
| ReuseBuffer | INT | 4 | +60 | +36 | バッファを再利用するかのフラグ。INT型。 |
| pAllocAllNodesContext | NDR_ALLOC_ALL_NODES_CONTEXT* | 8/4 | +64 | +40 | 全ノード一括確保のコンテキストへのポインター。 |
| pPointerQueueState | NDR_POINTER_QUEUE_STATE* | 8/4 | +72 | +44 | ポインターキューの状態へのポインター。 |
| IgnoreEmbeddedPointers | INT | 4 | +80 | +48 | 埋め込みポインターを無視するかのフラグ。INT型。 |
| PointerBufferMark | BYTE* | 8/4 | +88 | +52 | ポインターバッファのマーク位置へのポインター。 |
| CorrDespIncrement | BYTE | 1 | +96 | +56 | 相関記述子のインクリメント値。BYTE値。 |
| uFlags | BYTE | 1 | +97 | +57 | スタブ動作フラグ。BYTE値。 |
| UniquePtrCount | WORD | 2 | +98 | +58 | ユニークポインターの数。WORD値。 |
| MaxCount | UINT_PTR | 8/4 | +104 | +60 | 適合配列の最大要素数。UINT_PTR型。 |
| Offset | DWORD | 4 | +112 | +64 | 可変配列のオフセット。 |
| ActualCount | DWORD | 4 | +116 | +68 | 可変配列の実要素数。 |
| pfnAllocate | PFN_RPC_ALLOCATE | 8/4 | +120 | +72 | メモリ確保用のコールバック関数。 |
| pfnFree | PFN_RPC_FREE | 8/4 | +128 | +76 | メモリ解放用のコールバック関数。 |
| StackTop | BYTE* | 8/4 | +136 | +80 | スタックトップへのポインター。内部利用。 |
| pPresentedType | BYTE* | 8/4 | +144 | +84 | 提示された型のフォーマット記述へのポインター。 |
| pTransmitType | BYTE* | 8/4 | +152 | +88 | 送信型のフォーマット記述へのポインター。 |
| SavedHandle | void* | 8/4 | +160 | +92 | 保存されたハンドルへのポインター。 |
| StubDesc | MIDL_STUB_DESC* | 8/4 | +168 | +96 | スタブ記述子へのポインター。MIDL_STUB_DESC。 |
| FullPtrXlatTables | FULL_PTR_XLAT_TABLES* | 8/4 | +176 | +100 | フルポインター変換テーブルへのポインター。 |
| FullPtrRefId | DWORD | 4 | +184 | +104 | フルポインターの参照ID。 |
| PointerLength | DWORD | 4 | +188 | +108 | ポインターデータの長さをバイト単位で表す。 |
| _bitfield | INT | 4 | +192 | +112 | 複数の内部フラグをまとめたビットフィールド。INT型。 |
| dwDestContext | DWORD | 4 | +196 | +116 | マーシャリングの宛先コンテキストを示す値。 |
| pvDestContext | void* | 8/4 | +200 | +120 | 宛先コンテキストの追加データへのポインター。 |
| SavedContextHandles | NDR_SCONTEXT** | 8/4 | +208 | +124 | 保存されたコンテキストハンドルの配列へのポインター。 |
| ParamNumber | INT | 4 | +216 | +128 | 現在処理中のパラメーター番号。INT型。 |
| pRpcChannelBuffer | IRpcChannelBuffer* | 8/4 | +224 | +132 | RPCチャネルバッファインターフェイスへのポインター。 |
| pArrayInfo | ARRAY_INFO* | 8/4 | +232 | +136 | 配列情報へのポインター。ARRAY_INFO。 |
| SizePtrCountArray | DWORD* | 8/4 | +240 | +140 | サイズポインターの要素数配列へのポインター。 |
| SizePtrOffsetArray | DWORD* | 8/4 | +248 | +144 | サイズポインターのオフセット配列へのポインター。 |
| SizePtrLengthArray | DWORD* | 8/4 | +256 | +148 | サイズポインターの長さ配列へのポインター。 |
| pArgQueue | void* | 8/4 | +264 | +152 | 引数キューへのポインター。内部利用。 |
| dwStubPhase | DWORD | 4 | +272 | +156 | スタブの処理フェーズを示す値。 |
| LowStackMark | void* | 8/4 | +280 | +160 | スタック使用量の下限マークへのポインター。 |
| pAsyncMsg | PNDR_ASYNC_MESSAGE | 8/4 | +288 | +164 | 非同期メッセージへのポインター。 |
| pCorrInfo | PNDR_CORRELATION_INFO | 8/4 | +296 | +168 | 相関情報へのポインター。 |
| pCorrMemory | BYTE* | 8/4 | +304 | +172 | 相関計算用メモリへのポインター。 |
| pMemoryList | void* | 8/4 | +312 | +176 | 確保メモリのリストへのポインター。 |
| pCSInfo | INT_PTR | 8/4 | +320 | +180 | 国際化(コードセット)情報。INT_PTR型。 |
| ConformanceMark | BYTE* | 8/4 | +328 | +184 | 適合マーク位置へのポインター。 |
| VarianceMark | BYTE* | 8/4 | +336 | +188 | 可変マーク位置へのポインター。 |
| Unused | INT_PTR | 8/4 | +344 | +192 | 未使用の予約フィールド。INT_PTRサイズ。 |
| pContext | _NDR_PROC_CONTEXT* | 8/4 | +352 | +196 | プロシージャコンテキストへのポインター。内部利用。 |
| ContextHandleHash | void* | 8/4 | +360 | +200 | コンテキストハンドルのハッシュへのポインター。 |
| pUserMarshalList | void* | 8/4 | +368 | +204 | ユーザーマーシャルリストへのポインター。 |
| pFullPtrFormat | BYTE* | 8/4 | +376 | +208 | フルポインターのフォーマット記述へのポインター。 |
| Reserved51_4 | INT_PTR | 8/4 | +384 | +212 | 予約済みフィールド。INT_PTRサイズ。 |
| Reserved51_5 | INT_PTR | 8/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 Structureimport 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: intstruct 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