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 | 予約済みです。使用しないでください。 | ||||||||||||||||||||||||||||||||||||||||||
| dwMaxTxQueue | DWORD | 4 | +12 | +12 | ドライバーの内部出力バッファーの最大サイズ (バイト単位) です。値が 0 の場合は、シリアル プロバイダーによって最大値が課されていないことを示します。 | ||||||||||||||||||||||||||||||||||||||||||
| dwMaxRxQueue | DWORD | 4 | +16 | +16 | ドライバーの内部入力バッファーの最大サイズ (バイト単位) です。値が 0 の場合は、シリアル プロバイダーによって最大値が課されていないことを示します。 | ||||||||||||||||||||||||||||||||||||||||||
| dwMaxBaud | DWORD | 4 | +20 | +20 | 許容される最大のボー レート (ビット/秒 (bps)) です。このメンバーには次のいずれかの値を指定できます。
| ||||||||||||||||||||||||||||||||||||||||||
| dwProvSubType | DWORD | 4 | +24 | +24 | 通信プロバイダーの種類です。
| ||||||||||||||||||||||||||||||||||||||||||
| dwProvCapabilities | DWORD | 4 | +28 | +28 | プロバイダーが提供する機能を示すビットマスクです。このメンバーには次の値の組み合わせを指定できます。
| ||||||||||||||||||||||||||||||||||||||||||
| dwSettableParams | DWORD | 4 | +32 | +32 | 変更可能な通信パラメーターを示すビットマスクです。このメンバーには次の値の組み合わせを指定できます。
| ||||||||||||||||||||||||||||||||||||||||||
| dwSettableBaud | DWORD | 4 | +36 | +36 | 使用可能なボー レートです。値については dwMaxBaud メンバーを参照してください。 | ||||||||||||||||||||||||||||||||||||||||||
| 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 | プロバイダー固有のデータです。プロバイダーが要求するデータの形式に関する詳細な情報がない限り、アプリケーションはこのメンバーを無視してください。 GetCommProperties 関数を呼び出す前にこのメンバーを COMMPROP_INITIALIZED に設定すると、 wPacketLength メンバーが既に有効であることを示します。 | ||||||||||||||||||||||||||||||||||||||||||
| dwProvSpec2 | DWORD | 4 | +56 | +56 | プロバイダー固有のデータです。プロバイダーが要求するデータの形式に関する詳細な情報がない限り、アプリケーションはこのメンバーを無視してください。 | ||||||||||||||||||||||||||||||||||||||||||
| wcProvChar | WCHAR | 2 | +60 | +60 | プロバイダー固有のデータです。プロバイダーが要求するデータの形式に関する詳細な情報がない限り、アプリケーションはこのメンバーを無視してください。 |
公式ドキュメント
通信ドライバーに関する情報を格納します。
解説(Remarks)
dwProvSpec1、dwProvSpec2、wcProvChar の各メンバーの内容は、(dwProvSubType メンバーで指定される) プロバイダーのサブタイプによって異なります。
プロバイダーのサブタイプが PST_MODEM の場合、これらのメンバーは次のように使用されます。
| 値 | 説明 |
|---|---|
| dwProvSpec1 | 使用されません。 |
| dwProvSpec2 | 使用されません。 |
| wcProvChar | MODEMDEVCAPS 構造体を格納します。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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