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

DCB

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

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

フィールド

フィールドサイズx64x86説明
DCBlengthDWORD4+0+0構造体の長さ (バイト単位)。呼び出し元はこのメンバーに sizeof(DCB) を設定しなければなりません。
BaudRateDWORD4+4+4

通信デバイスが動作するボーレート。このメンバーには、実際のボーレート値、または 次のいずれかのインデックスを指定できます。

意味
CBR_110
110
110 bps
CBR_300
300
300 bps
CBR_600
600
600 bps
CBR_1200
1200
1200 bps
CBR_2400
2400
2400 bps
CBR_4800
4800
4800 bps
CBR_9600
9600
9600 bps
CBR_14400
14400
14400 bps
CBR_19200
19200
19200 bps
CBR_38400
38400
38400 bps
CBR_57600
57600
57600 bps
CBR_115200
115200
115200 bps
CBR_128000
128000
128000 bps
CBR_256000
256000
256000 bps
_bitfieldDWORD4+8+8fBinary・fParity・各種フロー制御フラグ等を格納するビットフィールド。
wReservedWORD2+12+12予約済みです。0 でなければなりません。
XonLimWORD2+14+14送信側による送信を許可するためにフロー制御が有効化されるまでに、入力バッファー内で使用が許可される最小バイト数。 これは、fInXfRtsControl、または fDtrControl の各メンバーで XON/XOFF、RTS、または DTR の入力フロー制御が指定されていることを前提としています。
XoffLimWORD2+16+16送信側を抑止するためにフロー制御が有効化されるまでに、入力バッファー内で許可される最小の空きバイト数。 フロー制御信号が有効になった後も送信側が文字を送信する場合があるため、この値を 0 にしてはなりません。 これは、fInXfRtsControl、または fDtrControl の各メンバーで XON/XOFF、RTS、または DTR の入力フロー制御が指定されていることを前提としています。 使用が許可される最大バイト数は、入力バッファーのサイズ (バイト単位) からこの値を引いて算出されます。
ByteSizeBYTE1+18+18送受信されるバイトのビット数。
ParityDCB_PARITY1+19+19

使用するパリティ方式。このメンバーには次のいずれかの値を指定できます。

意味
EVENPARITY
2
偶数パリティ。
MARKPARITY
3
マークパリティ。
NOPARITY
0
パリティなし。
ODDPARITY
1
奇数パリティ。
SPACEPARITY
4
スペースパリティ。
StopBitsDCB_STOP_BITS1+20+20

使用するストップビットの数。このメンバーには次のいずれかの値を指定できます。

意味
ONESTOPBIT
0
ストップビット 1 個。
ONE5STOPBITS
1
ストップビット 1.5 個。
TWOSTOPBITS
2
ストップビット 2 個。
XonCharCHAR1+21+21送信と受信の両方で使用する XON 文字の値。
XoffCharCHAR1+22+22送信と受信の両方で使用する XOFF 文字の値。
ErrorCharCHAR1+23+23パリティエラーを伴って受信したバイトを置き換えるために使用する文字の値。
EofCharCHAR1+24+24データの終端を通知するために使用する文字の値。
EvtCharCHAR1+25+25イベントを通知するために使用する文字の値。
wReserved1WORD2+26+26予約済みです。使用しないでください。

公式ドキュメント

シリアル通信デバイスの制御設定を定義します。

解説(Remarks)

DCB 構造体を使用して 8250 を構成する場合、 ByteSize メンバーおよび StopBits メンバーに指定する値には次の制限が適用されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// DCB  (x64 28 / x86 28 バイト)
typedef struct DCB {
    DWORD DCBlength;
    DWORD BaudRate;
    DWORD _bitfield;
    WORD wReserved;
    WORD XonLim;
    WORD XoffLim;
    BYTE ByteSize;
    DCB_PARITY Parity;
    DCB_STOP_BITS StopBits;
    CHAR XonChar;
    CHAR XoffChar;
    CHAR ErrorChar;
    CHAR EofChar;
    CHAR EvtChar;
    WORD wReserved1;
} DCB;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DCB
{
    public uint DCBlength;
    public uint BaudRate;
    public uint _bitfield;
    public ushort wReserved;
    public ushort XonLim;
    public ushort XoffLim;
    public byte ByteSize;
    public byte Parity;
    public byte StopBits;
    public sbyte XonChar;
    public sbyte XoffChar;
    public sbyte ErrorChar;
    public sbyte EofChar;
    public sbyte EvtChar;
    public ushort wReserved1;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DCB
    Public DCBlength As UInteger
    Public BaudRate As UInteger
    Public _bitfield As UInteger
    Public wReserved As UShort
    Public XonLim As UShort
    Public XoffLim As UShort
    Public ByteSize As Byte
    Public Parity As Byte
    Public StopBits As Byte
    Public XonChar As SByte
    Public XoffChar As SByte
    Public ErrorChar As SByte
    Public EofChar As SByte
    Public EvtChar As SByte
    Public wReserved1 As UShort
End Structure
import ctypes
from ctypes import wintypes

class DCB(ctypes.Structure):
    _fields_ = [
        ("DCBlength", wintypes.DWORD),
        ("BaudRate", wintypes.DWORD),
        ("_bitfield", wintypes.DWORD),
        ("wReserved", ctypes.c_ushort),
        ("XonLim", ctypes.c_ushort),
        ("XoffLim", ctypes.c_ushort),
        ("ByteSize", ctypes.c_ubyte),
        ("Parity", ctypes.c_ubyte),
        ("StopBits", ctypes.c_ubyte),
        ("XonChar", ctypes.c_byte),
        ("XoffChar", ctypes.c_byte),
        ("ErrorChar", ctypes.c_byte),
        ("EofChar", ctypes.c_byte),
        ("EvtChar", ctypes.c_byte),
        ("wReserved1", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct DCB {
    pub DCBlength: u32,
    pub BaudRate: u32,
    pub _bitfield: u32,
    pub wReserved: u16,
    pub XonLim: u16,
    pub XoffLim: u16,
    pub ByteSize: u8,
    pub Parity: u8,
    pub StopBits: u8,
    pub XonChar: i8,
    pub XoffChar: i8,
    pub ErrorChar: i8,
    pub EofChar: i8,
    pub EvtChar: i8,
    pub wReserved1: u16,
}
import "golang.org/x/sys/windows"

type DCB struct {
	DCBlength uint32
	BaudRate uint32
	_bitfield uint32
	wReserved uint16
	XonLim uint16
	XoffLim uint16
	ByteSize byte
	Parity byte
	StopBits byte
	XonChar int8
	XoffChar int8
	ErrorChar int8
	EofChar int8
	EvtChar int8
	wReserved1 uint16
}
type
  DCB = record
    DCBlength: DWORD;
    BaudRate: DWORD;
    _bitfield: DWORD;
    wReserved: Word;
    XonLim: Word;
    XoffLim: Word;
    ByteSize: Byte;
    Parity: Byte;
    StopBits: Byte;
    XonChar: Shortint;
    XoffChar: Shortint;
    ErrorChar: Shortint;
    EofChar: Shortint;
    EvtChar: Shortint;
    wReserved1: Word;
  end;
const DCB = extern struct {
    DCBlength: u32,
    BaudRate: u32,
    _bitfield: u32,
    wReserved: u16,
    XonLim: u16,
    XoffLim: u16,
    ByteSize: u8,
    Parity: u8,
    StopBits: u8,
    XonChar: i8,
    XoffChar: i8,
    ErrorChar: i8,
    EofChar: i8,
    EvtChar: i8,
    wReserved1: u16,
};
type
  DCB {.bycopy.} = object
    DCBlength: uint32
    BaudRate: uint32
    _bitfield: uint32
    wReserved: uint16
    XonLim: uint16
    XoffLim: uint16
    ByteSize: uint8
    Parity: uint8
    StopBits: uint8
    XonChar: int8
    XoffChar: int8
    ErrorChar: int8
    EofChar: int8
    EvtChar: int8
    wReserved1: uint16
struct DCB
{
    uint DCBlength;
    uint BaudRate;
    uint _bitfield;
    ushort wReserved;
    ushort XonLim;
    ushort XoffLim;
    ubyte ByteSize;
    ubyte Parity;
    ubyte StopBits;
    byte XonChar;
    byte XoffChar;
    byte ErrorChar;
    byte EofChar;
    byte EvtChar;
    ushort wReserved1;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DCB サイズ: 28 バイト(x64)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; DCBlength : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; BaudRate : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; _bitfield : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; wReserved : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; XonLim : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; XoffLim : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; ByteSize : BYTE (+18, 1byte)  poke st,18,値  /  値 = peek(st,18)
; Parity : DCB_PARITY (+19, 1byte)  poke st,19,値  /  値 = peek(st,19)
; StopBits : DCB_STOP_BITS (+20, 1byte)  poke st,20,値  /  値 = peek(st,20)
; XonChar : CHAR (+21, 1byte)  poke st,21,値  /  値 = peek(st,21)
; XoffChar : CHAR (+22, 1byte)  poke st,22,値  /  値 = peek(st,22)
; ErrorChar : CHAR (+23, 1byte)  poke st,23,値  /  値 = peek(st,23)
; EofChar : CHAR (+24, 1byte)  poke st,24,値  /  値 = peek(st,24)
; EvtChar : CHAR (+25, 1byte)  poke st,25,値  /  値 = peek(st,25)
; wReserved1 : WORD (+26, 2byte)  wpoke st,26,値  /  値 = wpeek(st,26)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DCB
    #field int DCBlength
    #field int BaudRate
    #field int _bitfield
    #field short wReserved
    #field short XonLim
    #field short XoffLim
    #field byte ByteSize
    #field byte Parity
    #field byte StopBits
    #field byte XonChar
    #field byte XoffChar
    #field byte ErrorChar
    #field byte EofChar
    #field byte EvtChar
    #field short wReserved1
#endstruct

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