ホーム › Devices.Communication › COMMPROP
COMMPROP
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| wPacketLength | WORD | 2 | +0 | +0 | この構造体全体のバイト単位サイズを示す。 |
| wPacketVersion | WORD | 2 | +2 | +2 | 構造体のバージョン番号を示す。 |
| dwServiceMask | DWORD | 4 | +4 | +4 | プロバイダが提供するサービスを示すマスク。通常SP_SERIALCOMM。 |
| dwReserved1 | DWORD | 4 | +8 | +8 | 予約フィールド。0を設定する。 |
| dwMaxTxQueue | DWORD | 4 | +12 | +12 | 送信キューの最大サイズをバイト単位で示す。0で無制限。 |
| dwMaxRxQueue | DWORD | 4 | +16 | +16 | 受信キューの最大サイズをバイト単位で示す。0で無制限。 |
| dwMaxBaud | DWORD | 4 | +20 | +20 | サポートされる最大ボーレートを示すコード。 |
| dwProvSubType | DWORD | 4 | +24 | +24 | 通信プロバイダのサブタイプを示す。RS-232やモデム等を表す。 |
| dwProvCapabilities | DWORD | 4 | +28 | +28 | プロバイダがサポートする機能を示すフラグ。 |
| dwSettableParams | DWORD | 4 | +32 | +32 | 変更可能な通信パラメータを示すフラグ。 |
| dwSettableBaud | DWORD | 4 | +36 | +36 | 設定可能なボーレートを示すフラグ。 |
| wSettableData | WORD | 2 | +40 | +40 | 設定可能なデータビット数を示すフラグ。 |
| wSettableStopParity | COMMPROP_STOP_PARITY | 2 | +42 | +42 | 設定可能なストップビットとパリティを示すフラグ。 |
| dwCurrentTxQueue | DWORD | 4 | +44 | +44 | 現在の送信キューサイズをバイト単位で示す。0で不明。 |
| dwCurrentRxQueue | DWORD | 4 | +48 | +48 | 現在の受信キューサイズをバイト単位で示す。0で不明。 |
| dwProvSpec1 | DWORD | 4 | +52 | +52 | プロバイダ固有データ1。用途はプロバイダ依存。 |
| dwProvSpec2 | DWORD | 4 | +56 | +56 | プロバイダ固有データ2。用途はプロバイダ依存。 |
| wcProvChar | WCHAR | 2 | +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 Structureimport 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