Win32 API 日本語リファレンス
ホームDevices.Communication › COMMPROP

COMMPROP

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

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

フィールド

フィールドサイズx64x86説明
wPacketLengthWORD2+0+0この構造体全体のバイト単位サイズを示す。
wPacketVersionWORD2+2+2構造体のバージョン番号を示す。
dwServiceMaskDWORD4+4+4プロバイダが提供するサービスを示すマスク。通常SP_SERIALCOMM。
dwReserved1DWORD4+8+8予約フィールド。0を設定する。
dwMaxTxQueueDWORD4+12+12送信キューの最大サイズをバイト単位で示す。0で無制限。
dwMaxRxQueueDWORD4+16+16受信キューの最大サイズをバイト単位で示す。0で無制限。
dwMaxBaudDWORD4+20+20サポートされる最大ボーレートを示すコード。
dwProvSubTypeDWORD4+24+24通信プロバイダのサブタイプを示す。RS-232やモデム等を表す。
dwProvCapabilitiesDWORD4+28+28プロバイダがサポートする機能を示すフラグ。
dwSettableParamsDWORD4+32+32変更可能な通信パラメータを示すフラグ。
dwSettableBaudDWORD4+36+36設定可能なボーレートを示すフラグ。
wSettableDataWORD2+40+40設定可能なデータビット数を示すフラグ。
wSettableStopParityCOMMPROP_STOP_PARITY2+42+42設定可能なストップビットとパリティを示すフラグ。
dwCurrentTxQueueDWORD4+44+44現在の送信キューサイズをバイト単位で示す。0で不明。
dwCurrentRxQueueDWORD4+48+48現在の受信キューサイズをバイト単位で示す。0で不明。
dwProvSpec1DWORD4+52+52プロバイダ固有データ1。用途はプロバイダ依存。
dwProvSpec2DWORD4+56+56プロバイダ固有データ2。用途はプロバイダ依存。
wcProvCharWCHAR2+60+60プロバイダ固有の可変長データ部の先頭文字。

各言語での定義

#include <windows.h>

// COMMPROP  (x64 64 / x86 64 バイト)
typedef struct COMMPROP {
    WORD wPacketLength;
    WORD wPacketVersion;
    DWORD dwServiceMask;
    DWORD dwReserved1;
    DWORD dwMaxTxQueue;
    DWORD dwMaxRxQueue;
    DWORD dwMaxBaud;
    DWORD dwProvSubType;
    DWORD dwProvCapabilities;
    DWORD dwSettableParams;
    DWORD dwSettableBaud;
    WORD wSettableData;
    COMMPROP_STOP_PARITY wSettableStopParity;
    DWORD dwCurrentTxQueue;
    DWORD dwCurrentRxQueue;
    DWORD dwProvSpec1;
    DWORD dwProvSpec2;
    WCHAR wcProvChar[1];
} COMMPROP;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct COMMPROP
{
    public ushort wPacketLength;
    public ushort wPacketVersion;
    public uint dwServiceMask;
    public uint dwReserved1;
    public uint dwMaxTxQueue;
    public uint dwMaxRxQueue;
    public uint dwMaxBaud;
    public uint dwProvSubType;
    public uint dwProvCapabilities;
    public uint dwSettableParams;
    public uint dwSettableBaud;
    public ushort wSettableData;
    public ushort wSettableStopParity;
    public uint dwCurrentTxQueue;
    public uint dwCurrentRxQueue;
    public uint dwProvSpec1;
    public uint dwProvSpec2;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)] public string wcProvChar;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure COMMPROP
    Public wPacketLength As UShort
    Public wPacketVersion As UShort
    Public dwServiceMask As UInteger
    Public dwReserved1 As UInteger
    Public dwMaxTxQueue As UInteger
    Public dwMaxRxQueue As UInteger
    Public dwMaxBaud As UInteger
    Public dwProvSubType As UInteger
    Public dwProvCapabilities As UInteger
    Public dwSettableParams As UInteger
    Public dwSettableBaud As UInteger
    Public wSettableData As UShort
    Public wSettableStopParity As UShort
    Public dwCurrentTxQueue As UInteger
    Public dwCurrentRxQueue As UInteger
    Public dwProvSpec1 As UInteger
    Public dwProvSpec2 As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1)> Public wcProvChar As String
End Structure
import ctypes
from ctypes import wintypes

class COMMPROP(ctypes.Structure):
    _fields_ = [
        ("wPacketLength", ctypes.c_ushort),
        ("wPacketVersion", ctypes.c_ushort),
        ("dwServiceMask", wintypes.DWORD),
        ("dwReserved1", wintypes.DWORD),
        ("dwMaxTxQueue", wintypes.DWORD),
        ("dwMaxRxQueue", wintypes.DWORD),
        ("dwMaxBaud", wintypes.DWORD),
        ("dwProvSubType", wintypes.DWORD),
        ("dwProvCapabilities", wintypes.DWORD),
        ("dwSettableParams", wintypes.DWORD),
        ("dwSettableBaud", wintypes.DWORD),
        ("wSettableData", ctypes.c_ushort),
        ("wSettableStopParity", ctypes.c_ushort),
        ("dwCurrentTxQueue", wintypes.DWORD),
        ("dwCurrentRxQueue", wintypes.DWORD),
        ("dwProvSpec1", wintypes.DWORD),
        ("dwProvSpec2", wintypes.DWORD),
        ("wcProvChar", ctypes.c_wchar * 1),
    ]
#[repr(C)]
pub struct COMMPROP {
    pub wPacketLength: u16,
    pub wPacketVersion: u16,
    pub dwServiceMask: u32,
    pub dwReserved1: u32,
    pub dwMaxTxQueue: u32,
    pub dwMaxRxQueue: u32,
    pub dwMaxBaud: u32,
    pub dwProvSubType: u32,
    pub dwProvCapabilities: u32,
    pub dwSettableParams: u32,
    pub dwSettableBaud: u32,
    pub wSettableData: u16,
    pub wSettableStopParity: u16,
    pub dwCurrentTxQueue: u32,
    pub dwCurrentRxQueue: u32,
    pub dwProvSpec1: u32,
    pub dwProvSpec2: u32,
    pub wcProvChar: [u16; 1],
}
import "golang.org/x/sys/windows"

type COMMPROP struct {
	wPacketLength uint16
	wPacketVersion uint16
	dwServiceMask uint32
	dwReserved1 uint32
	dwMaxTxQueue uint32
	dwMaxRxQueue uint32
	dwMaxBaud uint32
	dwProvSubType uint32
	dwProvCapabilities uint32
	dwSettableParams uint32
	dwSettableBaud uint32
	wSettableData uint16
	wSettableStopParity uint16
	dwCurrentTxQueue uint32
	dwCurrentRxQueue uint32
	dwProvSpec1 uint32
	dwProvSpec2 uint32
	wcProvChar [1]uint16
}
type
  COMMPROP = record
    wPacketLength: Word;
    wPacketVersion: Word;
    dwServiceMask: DWORD;
    dwReserved1: DWORD;
    dwMaxTxQueue: DWORD;
    dwMaxRxQueue: DWORD;
    dwMaxBaud: DWORD;
    dwProvSubType: DWORD;
    dwProvCapabilities: DWORD;
    dwSettableParams: DWORD;
    dwSettableBaud: DWORD;
    wSettableData: Word;
    wSettableStopParity: Word;
    dwCurrentTxQueue: DWORD;
    dwCurrentRxQueue: DWORD;
    dwProvSpec1: DWORD;
    dwProvSpec2: DWORD;
    wcProvChar: array[0..0] of WideChar;
  end;
const COMMPROP = extern struct {
    wPacketLength: u16,
    wPacketVersion: u16,
    dwServiceMask: u32,
    dwReserved1: u32,
    dwMaxTxQueue: u32,
    dwMaxRxQueue: u32,
    dwMaxBaud: u32,
    dwProvSubType: u32,
    dwProvCapabilities: u32,
    dwSettableParams: u32,
    dwSettableBaud: u32,
    wSettableData: u16,
    wSettableStopParity: u16,
    dwCurrentTxQueue: u32,
    dwCurrentRxQueue: u32,
    dwProvSpec1: u32,
    dwProvSpec2: u32,
    wcProvChar: [1]u16,
};
type
  COMMPROP {.bycopy.} = object
    wPacketLength: uint16
    wPacketVersion: uint16
    dwServiceMask: uint32
    dwReserved1: uint32
    dwMaxTxQueue: uint32
    dwMaxRxQueue: uint32
    dwMaxBaud: uint32
    dwProvSubType: uint32
    dwProvCapabilities: uint32
    dwSettableParams: uint32
    dwSettableBaud: uint32
    wSettableData: uint16
    wSettableStopParity: uint16
    dwCurrentTxQueue: uint32
    dwCurrentRxQueue: uint32
    dwProvSpec1: uint32
    dwProvSpec2: uint32
    wcProvChar: array[1, uint16]
struct COMMPROP
{
    ushort wPacketLength;
    ushort wPacketVersion;
    uint dwServiceMask;
    uint dwReserved1;
    uint dwMaxTxQueue;
    uint dwMaxRxQueue;
    uint dwMaxBaud;
    uint dwProvSubType;
    uint dwProvCapabilities;
    uint dwSettableParams;
    uint dwSettableBaud;
    ushort wSettableData;
    ushort wSettableStopParity;
    uint dwCurrentTxQueue;
    uint dwCurrentRxQueue;
    uint dwProvSpec1;
    uint dwProvSpec2;
    wchar[1] wcProvChar;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; COMMPROP サイズ: 64 バイト(x64)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; wPacketLength : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; wPacketVersion : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; dwServiceMask : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwReserved1 : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwMaxTxQueue : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwMaxRxQueue : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwMaxBaud : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwProvSubType : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwProvCapabilities : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwSettableParams : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwSettableBaud : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; wSettableData : WORD (+40, 2byte)  wpoke st,40,値  /  値 = wpeek(st,40)
; wSettableStopParity : COMMPROP_STOP_PARITY (+42, 2byte)  wpoke st,42,値  /  値 = wpeek(st,42)
; dwCurrentTxQueue : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwCurrentRxQueue : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwProvSpec1 : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; dwProvSpec2 : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; wcProvChar : WCHAR (+60, 2byte)  varptr(st)+60 を基点に操作(2byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global COMMPROP
    #field short wPacketLength
    #field short wPacketVersion
    #field int dwServiceMask
    #field int dwReserved1
    #field int dwMaxTxQueue
    #field int dwMaxRxQueue
    #field int dwMaxBaud
    #field int dwProvSubType
    #field int dwProvCapabilities
    #field int dwSettableParams
    #field int dwSettableBaud
    #field short wSettableData
    #field short wSettableStopParity
    #field int dwCurrentTxQueue
    #field int dwCurrentRxQueue
    #field int dwProvSpec1
    #field int dwProvSpec2
    #field wchar wcProvChar 1
#endstruct

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