ホーム › System.Rpc › NDR_CS_SIZE_CONVERT_ROUTINES
NDR_CS_SIZE_CONVERT_ROUTINES
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| pfnNetSize | CS_TYPE_NET_SIZE_ROUTINE | 8/4 | +0 | +0 | ネットワーク側のサイズを計算するルーチン。 |
| pfnToNetCs | CS_TYPE_TO_NETCS_ROUTINE | 8/4 | +8 | +4 | ローカルコードセットからネットワークコードセットへ変換するルーチン。 |
| pfnLocalSize | CS_TYPE_LOCAL_SIZE_ROUTINE | 8/4 | +16 | +8 | ローカル側のサイズを計算するルーチン。 |
| pfnFromNetCs | CS_TYPE_FROM_NETCS_ROUTINE | 8/4 | +24 | +12 | ネットワークコードセットからローカルコードセットへ変換するルーチン。 |
各言語での定義
#include <windows.h>
// NDR_CS_SIZE_CONVERT_ROUTINES (x64 32 / x86 16 バイト)
typedef struct NDR_CS_SIZE_CONVERT_ROUTINES {
CS_TYPE_NET_SIZE_ROUTINE pfnNetSize;
CS_TYPE_TO_NETCS_ROUTINE pfnToNetCs;
CS_TYPE_LOCAL_SIZE_ROUTINE pfnLocalSize;
CS_TYPE_FROM_NETCS_ROUTINE pfnFromNetCs;
} NDR_CS_SIZE_CONVERT_ROUTINES;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDR_CS_SIZE_CONVERT_ROUTINES
{
public IntPtr pfnNetSize;
public IntPtr pfnToNetCs;
public IntPtr pfnLocalSize;
public IntPtr pfnFromNetCs;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDR_CS_SIZE_CONVERT_ROUTINES
Public pfnNetSize As IntPtr
Public pfnToNetCs As IntPtr
Public pfnLocalSize As IntPtr
Public pfnFromNetCs As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class NDR_CS_SIZE_CONVERT_ROUTINES(ctypes.Structure):
_fields_ = [
("pfnNetSize", ctypes.c_void_p),
("pfnToNetCs", ctypes.c_void_p),
("pfnLocalSize", ctypes.c_void_p),
("pfnFromNetCs", ctypes.c_void_p),
]#[repr(C)]
pub struct NDR_CS_SIZE_CONVERT_ROUTINES {
pub pfnNetSize: *mut core::ffi::c_void,
pub pfnToNetCs: *mut core::ffi::c_void,
pub pfnLocalSize: *mut core::ffi::c_void,
pub pfnFromNetCs: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type NDR_CS_SIZE_CONVERT_ROUTINES struct {
pfnNetSize uintptr
pfnToNetCs uintptr
pfnLocalSize uintptr
pfnFromNetCs uintptr
}type
NDR_CS_SIZE_CONVERT_ROUTINES = record
pfnNetSize: Pointer;
pfnToNetCs: Pointer;
pfnLocalSize: Pointer;
pfnFromNetCs: Pointer;
end;const NDR_CS_SIZE_CONVERT_ROUTINES = extern struct {
pfnNetSize: ?*anyopaque,
pfnToNetCs: ?*anyopaque,
pfnLocalSize: ?*anyopaque,
pfnFromNetCs: ?*anyopaque,
};type
NDR_CS_SIZE_CONVERT_ROUTINES {.bycopy.} = object
pfnNetSize: pointer
pfnToNetCs: pointer
pfnLocalSize: pointer
pfnFromNetCs: pointerstruct NDR_CS_SIZE_CONVERT_ROUTINES
{
void* pfnNetSize;
void* pfnToNetCs;
void* pfnLocalSize;
void* pfnFromNetCs;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; NDR_CS_SIZE_CONVERT_ROUTINES サイズ: 16 バイト(x86)
dim st, 4 ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; pfnNetSize : CS_TYPE_NET_SIZE_ROUTINE (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pfnToNetCs : CS_TYPE_TO_NETCS_ROUTINE (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pfnLocalSize : CS_TYPE_LOCAL_SIZE_ROUTINE (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pfnFromNetCs : CS_TYPE_FROM_NETCS_ROUTINE (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NDR_CS_SIZE_CONVERT_ROUTINES サイズ: 32 バイト(x64)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; pfnNetSize : CS_TYPE_NET_SIZE_ROUTINE (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pfnToNetCs : CS_TYPE_TO_NETCS_ROUTINE (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pfnLocalSize : CS_TYPE_LOCAL_SIZE_ROUTINE (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pfnFromNetCs : CS_TYPE_FROM_NETCS_ROUTINE (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global NDR_CS_SIZE_CONVERT_ROUTINES
#field intptr pfnNetSize
#field intptr pfnToNetCs
#field intptr pfnLocalSize
#field intptr pfnFromNetCs
#endstruct
stdim st, NDR_CS_SIZE_CONVERT_ROUTINES ; NSTRUCT 変数を確保