Win32 API 日本語リファレンス
ホームGraphics.Printing › MONITOR2

MONITOR2

構造体
サイズx64: 184 バイト / x86: 92 バイト

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズをバイト単位で指定する。
pfnEnumPortsPFN_PRINTING_ENUMPORTS28/4+8+4ポートを列挙するモニター関数へのポインター。
pfnOpenPortPFN_PRINTING_OPENPORT28/4+16+8ポートを開くモニター関数へのポインター。
pfnOpenPortExPFN_PRINTING_OPENPORTEX28/4+24+12ポートを拡張形式で開くモニター関数へのポインター。
pfnStartDocPortPFN_PRINTING_STARTDOCPORT28/4+32+16ポートでのドキュメント開始を行う関数へのポインター。
pfnWritePortPFN_PRINTING_WRITEPORT28/4+40+20ポートへの書き込みを行う関数へのポインター。
pfnReadPortPFN_PRINTING_READPORT28/4+48+24ポートからの読み取りを行う関数へのポインター。
pfnEndDocPortPFN_PRINTING_ENDDOCPORT28/4+56+28ポートでのドキュメント終了を行う関数へのポインター。
pfnClosePortPFN_PRINTING_CLOSEPORT28/4+64+32ポートを閉じる関数へのポインター。
pfnAddPortPFN_PRINTING_ADDPORT28/4+72+36ポートを追加する関数へのポインター。
pfnAddPortExPFN_PRINTING_ADDPORTEX28/4+80+40ポートを拡張形式で追加する関数へのポインター。
pfnConfigurePortPFN_PRINTING_CONFIGUREPORT28/4+88+44ポートを構成する関数へのポインター。
pfnDeletePortPFN_PRINTING_DELETEPORT28/4+96+48ポートを削除する関数へのポインター。
pfnGetPrinterDataFromPortPFN_PRINTING_GETPRINTERDATAFROMPORT28/4+104+52ポートからプリンターデータを取得する関数へのポインター。
pfnSetPortTimeOutsPFN_PRINTING_SETPORTTIMEOUTS28/4+112+56ポートのタイムアウトを設定する関数へのポインター。
pfnXcvOpenPortPFN_PRINTING_XCVOPENPORT28/4+120+60XcvでポートをオープンするXcvOpenPort関数へのポインター。
pfnXcvDataPortPFN_PRINTING_XCVDATAPORT28/4+128+64Xcvデータ操作を行うXcvDataPort関数へのポインター。
pfnXcvClosePortPFN_PRINTING_XCVCLOSEPORT28/4+136+68XcvポートをクローズするXcvClosePort関数へのポインター。
pfnShutdownPFN_PRINTING_SHUTDOWN28/4+144+72モニターのシャットダウン処理を行う関数へのポインター。
pfnSendRecvBidiDataFromPortPFN_PRINTING_SENDRECVBIDIDATAFROMPORT28/4+152+76ポートに対し双方向(Bidi)データを送受信する関数へのポインター。
pfnNotifyUsedPortsPFN_PRINTING_NOTIFYUSEDPORTS28/4+160+80使用中ポートを通知する関数へのポインター。
pfnNotifyUnusedPortsPFN_PRINTING_NOTIFYUNUSEDPORTS28/4+168+84未使用ポートを通知する関数へのポインター。
pfnPowerEventPFN_PRINTING_POWEREVENT28/4+176+88電源イベントを処理する関数へのポインター。

各言語での定義

#include <windows.h>

// MONITOR2  (x64 184 / x86 92 バイト)
typedef struct MONITOR2 {
    DWORD cbSize;
    PFN_PRINTING_ENUMPORTS2 pfnEnumPorts;
    PFN_PRINTING_OPENPORT2 pfnOpenPort;
    PFN_PRINTING_OPENPORTEX2 pfnOpenPortEx;
    PFN_PRINTING_STARTDOCPORT2 pfnStartDocPort;
    PFN_PRINTING_WRITEPORT2 pfnWritePort;
    PFN_PRINTING_READPORT2 pfnReadPort;
    PFN_PRINTING_ENDDOCPORT2 pfnEndDocPort;
    PFN_PRINTING_CLOSEPORT2 pfnClosePort;
    PFN_PRINTING_ADDPORT2 pfnAddPort;
    PFN_PRINTING_ADDPORTEX2 pfnAddPortEx;
    PFN_PRINTING_CONFIGUREPORT2 pfnConfigurePort;
    PFN_PRINTING_DELETEPORT2 pfnDeletePort;
    PFN_PRINTING_GETPRINTERDATAFROMPORT2 pfnGetPrinterDataFromPort;
    PFN_PRINTING_SETPORTTIMEOUTS2 pfnSetPortTimeOuts;
    PFN_PRINTING_XCVOPENPORT2 pfnXcvOpenPort;
    PFN_PRINTING_XCVDATAPORT2 pfnXcvDataPort;
    PFN_PRINTING_XCVCLOSEPORT2 pfnXcvClosePort;
    PFN_PRINTING_SHUTDOWN2 pfnShutdown;
    PFN_PRINTING_SENDRECVBIDIDATAFROMPORT2 pfnSendRecvBidiDataFromPort;
    PFN_PRINTING_NOTIFYUSEDPORTS2 pfnNotifyUsedPorts;
    PFN_PRINTING_NOTIFYUNUSEDPORTS2 pfnNotifyUnusedPorts;
    PFN_PRINTING_POWEREVENT2 pfnPowerEvent;
} MONITOR2;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MONITOR2
{
    public uint cbSize;
    public IntPtr pfnEnumPorts;
    public IntPtr pfnOpenPort;
    public IntPtr pfnOpenPortEx;
    public IntPtr pfnStartDocPort;
    public IntPtr pfnWritePort;
    public IntPtr pfnReadPort;
    public IntPtr pfnEndDocPort;
    public IntPtr pfnClosePort;
    public IntPtr pfnAddPort;
    public IntPtr pfnAddPortEx;
    public IntPtr pfnConfigurePort;
    public IntPtr pfnDeletePort;
    public IntPtr pfnGetPrinterDataFromPort;
    public IntPtr pfnSetPortTimeOuts;
    public IntPtr pfnXcvOpenPort;
    public IntPtr pfnXcvDataPort;
    public IntPtr pfnXcvClosePort;
    public IntPtr pfnShutdown;
    public IntPtr pfnSendRecvBidiDataFromPort;
    public IntPtr pfnNotifyUsedPorts;
    public IntPtr pfnNotifyUnusedPorts;
    public IntPtr pfnPowerEvent;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MONITOR2
    Public cbSize As UInteger
    Public pfnEnumPorts As IntPtr
    Public pfnOpenPort As IntPtr
    Public pfnOpenPortEx As IntPtr
    Public pfnStartDocPort As IntPtr
    Public pfnWritePort As IntPtr
    Public pfnReadPort As IntPtr
    Public pfnEndDocPort As IntPtr
    Public pfnClosePort As IntPtr
    Public pfnAddPort As IntPtr
    Public pfnAddPortEx As IntPtr
    Public pfnConfigurePort As IntPtr
    Public pfnDeletePort As IntPtr
    Public pfnGetPrinterDataFromPort As IntPtr
    Public pfnSetPortTimeOuts As IntPtr
    Public pfnXcvOpenPort As IntPtr
    Public pfnXcvDataPort As IntPtr
    Public pfnXcvClosePort As IntPtr
    Public pfnShutdown As IntPtr
    Public pfnSendRecvBidiDataFromPort As IntPtr
    Public pfnNotifyUsedPorts As IntPtr
    Public pfnNotifyUnusedPorts As IntPtr
    Public pfnPowerEvent As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class MONITOR2(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("pfnEnumPorts", ctypes.c_void_p),
        ("pfnOpenPort", ctypes.c_void_p),
        ("pfnOpenPortEx", ctypes.c_void_p),
        ("pfnStartDocPort", ctypes.c_void_p),
        ("pfnWritePort", ctypes.c_void_p),
        ("pfnReadPort", ctypes.c_void_p),
        ("pfnEndDocPort", ctypes.c_void_p),
        ("pfnClosePort", ctypes.c_void_p),
        ("pfnAddPort", ctypes.c_void_p),
        ("pfnAddPortEx", ctypes.c_void_p),
        ("pfnConfigurePort", ctypes.c_void_p),
        ("pfnDeletePort", ctypes.c_void_p),
        ("pfnGetPrinterDataFromPort", ctypes.c_void_p),
        ("pfnSetPortTimeOuts", ctypes.c_void_p),
        ("pfnXcvOpenPort", ctypes.c_void_p),
        ("pfnXcvDataPort", ctypes.c_void_p),
        ("pfnXcvClosePort", ctypes.c_void_p),
        ("pfnShutdown", ctypes.c_void_p),
        ("pfnSendRecvBidiDataFromPort", ctypes.c_void_p),
        ("pfnNotifyUsedPorts", ctypes.c_void_p),
        ("pfnNotifyUnusedPorts", ctypes.c_void_p),
        ("pfnPowerEvent", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct MONITOR2 {
    pub cbSize: u32,
    pub pfnEnumPorts: *mut core::ffi::c_void,
    pub pfnOpenPort: *mut core::ffi::c_void,
    pub pfnOpenPortEx: *mut core::ffi::c_void,
    pub pfnStartDocPort: *mut core::ffi::c_void,
    pub pfnWritePort: *mut core::ffi::c_void,
    pub pfnReadPort: *mut core::ffi::c_void,
    pub pfnEndDocPort: *mut core::ffi::c_void,
    pub pfnClosePort: *mut core::ffi::c_void,
    pub pfnAddPort: *mut core::ffi::c_void,
    pub pfnAddPortEx: *mut core::ffi::c_void,
    pub pfnConfigurePort: *mut core::ffi::c_void,
    pub pfnDeletePort: *mut core::ffi::c_void,
    pub pfnGetPrinterDataFromPort: *mut core::ffi::c_void,
    pub pfnSetPortTimeOuts: *mut core::ffi::c_void,
    pub pfnXcvOpenPort: *mut core::ffi::c_void,
    pub pfnXcvDataPort: *mut core::ffi::c_void,
    pub pfnXcvClosePort: *mut core::ffi::c_void,
    pub pfnShutdown: *mut core::ffi::c_void,
    pub pfnSendRecvBidiDataFromPort: *mut core::ffi::c_void,
    pub pfnNotifyUsedPorts: *mut core::ffi::c_void,
    pub pfnNotifyUnusedPorts: *mut core::ffi::c_void,
    pub pfnPowerEvent: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type MONITOR2 struct {
	cbSize uint32
	pfnEnumPorts uintptr
	pfnOpenPort uintptr
	pfnOpenPortEx uintptr
	pfnStartDocPort uintptr
	pfnWritePort uintptr
	pfnReadPort uintptr
	pfnEndDocPort uintptr
	pfnClosePort uintptr
	pfnAddPort uintptr
	pfnAddPortEx uintptr
	pfnConfigurePort uintptr
	pfnDeletePort uintptr
	pfnGetPrinterDataFromPort uintptr
	pfnSetPortTimeOuts uintptr
	pfnXcvOpenPort uintptr
	pfnXcvDataPort uintptr
	pfnXcvClosePort uintptr
	pfnShutdown uintptr
	pfnSendRecvBidiDataFromPort uintptr
	pfnNotifyUsedPorts uintptr
	pfnNotifyUnusedPorts uintptr
	pfnPowerEvent uintptr
}
type
  MONITOR2 = record
    cbSize: DWORD;
    pfnEnumPorts: Pointer;
    pfnOpenPort: Pointer;
    pfnOpenPortEx: Pointer;
    pfnStartDocPort: Pointer;
    pfnWritePort: Pointer;
    pfnReadPort: Pointer;
    pfnEndDocPort: Pointer;
    pfnClosePort: Pointer;
    pfnAddPort: Pointer;
    pfnAddPortEx: Pointer;
    pfnConfigurePort: Pointer;
    pfnDeletePort: Pointer;
    pfnGetPrinterDataFromPort: Pointer;
    pfnSetPortTimeOuts: Pointer;
    pfnXcvOpenPort: Pointer;
    pfnXcvDataPort: Pointer;
    pfnXcvClosePort: Pointer;
    pfnShutdown: Pointer;
    pfnSendRecvBidiDataFromPort: Pointer;
    pfnNotifyUsedPorts: Pointer;
    pfnNotifyUnusedPorts: Pointer;
    pfnPowerEvent: Pointer;
  end;
const MONITOR2 = extern struct {
    cbSize: u32,
    pfnEnumPorts: ?*anyopaque,
    pfnOpenPort: ?*anyopaque,
    pfnOpenPortEx: ?*anyopaque,
    pfnStartDocPort: ?*anyopaque,
    pfnWritePort: ?*anyopaque,
    pfnReadPort: ?*anyopaque,
    pfnEndDocPort: ?*anyopaque,
    pfnClosePort: ?*anyopaque,
    pfnAddPort: ?*anyopaque,
    pfnAddPortEx: ?*anyopaque,
    pfnConfigurePort: ?*anyopaque,
    pfnDeletePort: ?*anyopaque,
    pfnGetPrinterDataFromPort: ?*anyopaque,
    pfnSetPortTimeOuts: ?*anyopaque,
    pfnXcvOpenPort: ?*anyopaque,
    pfnXcvDataPort: ?*anyopaque,
    pfnXcvClosePort: ?*anyopaque,
    pfnShutdown: ?*anyopaque,
    pfnSendRecvBidiDataFromPort: ?*anyopaque,
    pfnNotifyUsedPorts: ?*anyopaque,
    pfnNotifyUnusedPorts: ?*anyopaque,
    pfnPowerEvent: ?*anyopaque,
};
type
  MONITOR2 {.bycopy.} = object
    cbSize: uint32
    pfnEnumPorts: pointer
    pfnOpenPort: pointer
    pfnOpenPortEx: pointer
    pfnStartDocPort: pointer
    pfnWritePort: pointer
    pfnReadPort: pointer
    pfnEndDocPort: pointer
    pfnClosePort: pointer
    pfnAddPort: pointer
    pfnAddPortEx: pointer
    pfnConfigurePort: pointer
    pfnDeletePort: pointer
    pfnGetPrinterDataFromPort: pointer
    pfnSetPortTimeOuts: pointer
    pfnXcvOpenPort: pointer
    pfnXcvDataPort: pointer
    pfnXcvClosePort: pointer
    pfnShutdown: pointer
    pfnSendRecvBidiDataFromPort: pointer
    pfnNotifyUsedPorts: pointer
    pfnNotifyUnusedPorts: pointer
    pfnPowerEvent: pointer
struct MONITOR2
{
    uint cbSize;
    void* pfnEnumPorts;
    void* pfnOpenPort;
    void* pfnOpenPortEx;
    void* pfnStartDocPort;
    void* pfnWritePort;
    void* pfnReadPort;
    void* pfnEndDocPort;
    void* pfnClosePort;
    void* pfnAddPort;
    void* pfnAddPortEx;
    void* pfnConfigurePort;
    void* pfnDeletePort;
    void* pfnGetPrinterDataFromPort;
    void* pfnSetPortTimeOuts;
    void* pfnXcvOpenPort;
    void* pfnXcvDataPort;
    void* pfnXcvClosePort;
    void* pfnShutdown;
    void* pfnSendRecvBidiDataFromPort;
    void* pfnNotifyUsedPorts;
    void* pfnNotifyUnusedPorts;
    void* pfnPowerEvent;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MONITOR2 サイズ: 92 バイト(x86)
dim st, 23    ; 4byte整数×23(構造体サイズ 92 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pfnEnumPorts : PFN_PRINTING_ENUMPORTS2 (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pfnOpenPort : PFN_PRINTING_OPENPORT2 (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pfnOpenPortEx : PFN_PRINTING_OPENPORTEX2 (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; pfnStartDocPort : PFN_PRINTING_STARTDOCPORT2 (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pfnWritePort : PFN_PRINTING_WRITEPORT2 (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; pfnReadPort : PFN_PRINTING_READPORT2 (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; pfnEndDocPort : PFN_PRINTING_ENDDOCPORT2 (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; pfnClosePort : PFN_PRINTING_CLOSEPORT2 (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; pfnAddPort : PFN_PRINTING_ADDPORT2 (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; pfnAddPortEx : PFN_PRINTING_ADDPORTEX2 (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; pfnConfigurePort : PFN_PRINTING_CONFIGUREPORT2 (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; pfnDeletePort : PFN_PRINTING_DELETEPORT2 (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; pfnGetPrinterDataFromPort : PFN_PRINTING_GETPRINTERDATAFROMPORT2 (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; pfnSetPortTimeOuts : PFN_PRINTING_SETPORTTIMEOUTS2 (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; pfnXcvOpenPort : PFN_PRINTING_XCVOPENPORT2 (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; pfnXcvDataPort : PFN_PRINTING_XCVDATAPORT2 (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; pfnXcvClosePort : PFN_PRINTING_XCVCLOSEPORT2 (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; pfnShutdown : PFN_PRINTING_SHUTDOWN2 (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; pfnSendRecvBidiDataFromPort : PFN_PRINTING_SENDRECVBIDIDATAFROMPORT2 (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; pfnNotifyUsedPorts : PFN_PRINTING_NOTIFYUSEDPORTS2 (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; pfnNotifyUnusedPorts : PFN_PRINTING_NOTIFYUNUSEDPORTS2 (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; pfnPowerEvent : PFN_PRINTING_POWEREVENT2 (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MONITOR2 サイズ: 184 バイト(x64)
dim st, 46    ; 4byte整数×46(構造体サイズ 184 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pfnEnumPorts : PFN_PRINTING_ENUMPORTS2 (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pfnOpenPort : PFN_PRINTING_OPENPORT2 (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pfnOpenPortEx : PFN_PRINTING_OPENPORTEX2 (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pfnStartDocPort : PFN_PRINTING_STARTDOCPORT2 (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; pfnWritePort : PFN_PRINTING_WRITEPORT2 (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; pfnReadPort : PFN_PRINTING_READPORT2 (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; pfnEndDocPort : PFN_PRINTING_ENDDOCPORT2 (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; pfnClosePort : PFN_PRINTING_CLOSEPORT2 (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; pfnAddPort : PFN_PRINTING_ADDPORT2 (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; pfnAddPortEx : PFN_PRINTING_ADDPORTEX2 (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; pfnConfigurePort : PFN_PRINTING_CONFIGUREPORT2 (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; pfnDeletePort : PFN_PRINTING_DELETEPORT2 (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; pfnGetPrinterDataFromPort : PFN_PRINTING_GETPRINTERDATAFROMPORT2 (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; pfnSetPortTimeOuts : PFN_PRINTING_SETPORTTIMEOUTS2 (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; pfnXcvOpenPort : PFN_PRINTING_XCVOPENPORT2 (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; pfnXcvDataPort : PFN_PRINTING_XCVDATAPORT2 (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; pfnXcvClosePort : PFN_PRINTING_XCVCLOSEPORT2 (+136, 8byte)  qpoke st,136,値 / qpeek(st,136)  ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; pfnShutdown : PFN_PRINTING_SHUTDOWN2 (+144, 8byte)  qpoke st,144,値 / qpeek(st,144)  ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; pfnSendRecvBidiDataFromPort : PFN_PRINTING_SENDRECVBIDIDATAFROMPORT2 (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; pfnNotifyUsedPorts : PFN_PRINTING_NOTIFYUSEDPORTS2 (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; pfnNotifyUnusedPorts : PFN_PRINTING_NOTIFYUNUSEDPORTS2 (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; pfnPowerEvent : PFN_PRINTING_POWEREVENT2 (+176, 8byte)  qpoke st,176,値 / qpeek(st,176)  ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MONITOR2
    #field int cbSize
    #field intptr pfnEnumPorts
    #field intptr pfnOpenPort
    #field intptr pfnOpenPortEx
    #field intptr pfnStartDocPort
    #field intptr pfnWritePort
    #field intptr pfnReadPort
    #field intptr pfnEndDocPort
    #field intptr pfnClosePort
    #field intptr pfnAddPort
    #field intptr pfnAddPortEx
    #field intptr pfnConfigurePort
    #field intptr pfnDeletePort
    #field intptr pfnGetPrinterDataFromPort
    #field intptr pfnSetPortTimeOuts
    #field intptr pfnXcvOpenPort
    #field intptr pfnXcvDataPort
    #field intptr pfnXcvClosePort
    #field intptr pfnShutdown
    #field intptr pfnSendRecvBidiDataFromPort
    #field intptr pfnNotifyUsedPorts
    #field intptr pfnNotifyUnusedPorts
    #field intptr pfnPowerEvent
#endstruct

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