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

LINEDEVCAPS

構造体
サイズx64: 268 バイト / x86: 268 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
dwTotalSizeDWORD4+0+0このデータ構造に割り当てられた合計サイズ(バイト単位)。
dwNeededSizeDWORD4+4+4このデータ構造が返されるすべての情報を保持するために必要なサイズ(バイト単位)。
dwUsedSizeDWORD4+8+8このデータ構造のうち、有用な情報が格納されている部分のサイズ(バイト単位)。
dwProviderInfoSizeDWORD4+12+12サービスプロバイダー情報を格納する可変サイズのフィールドのサイズ(バイト単位)。
dwProviderInfoOffsetDWORD4+16+16

構造体の先頭からサービスプロバイダー情報までのオフセット(バイト単位)。

dwProviderInfoSize メンバーと dwProviderInfoOffset メンバーは、ベンダー名やハードウェアおよびソフトウェアのバージョン番号など、プロバイダーのハードウェアやソフトウェアに関する情報を提供することを目的としています。この情報は、プロバイダーに関する問題でユーザーがカスタマーサービスに問い合わせる必要がある場合に役立ちます。

dwSwitchInfoSizeDWORD4+20+20交換機情報を格納する可変サイズのデバイスフィールドのサイズ(バイト単位)。
dwSwitchInfoOffsetDWORD4+24+24

構造体の先頭から交換機情報までのオフセット(バイト単位)。

dwSwitchInfoSize メンバーと dwSwitchInfoOffset メンバーは、交換機の製造元、モデル名、ソフトウェアのバージョンなど、回線デバイスが接続されている交換機に関する情報を提供することを目的としています。この情報は、交換機に関する問題でユーザーがカスタマーサービスに問い合わせる必要がある場合に役立ちます。

dwPermanentLineIDDWORD4+28+28システムの構成において回線デバイスを識別するための永続的な識別子です。これは回線デバイスの永続的な名前です。この永続的な名前は(dwDeviceID とは異なり)、システムに回線が追加または削除されても変化せず、オペレーティングシステムのアップグレードを経ても保持されます。そのため、他の回線の追加や削除、オペレーティングシステムの変更による影響を受けない形で、.ini ファイル(またはその他のファイル)内の回線固有の情報を関連付けるために使用できます。
dwLineNameSizeDWORD4+32+32この回線デバイスに対してユーザーが構成できる名前を格納する、可変サイズのデバイスフィールドのサイズ(バイト単位)。
dwLineNameOffsetDWORD4+36+36このデータ構造の先頭から、この回線デバイスの名前までのオフセットです。この名前は、回線デバイスのサービスプロバイダーを構成する際にユーザーが設定でき、ユーザーの利便性のために提供されます。フィールドのサイズは dwLineNameSize で指定されます。
dwStringFormatDWORD4+40+40この回線デバイスで使用される文字列形式です。このメンバーは、 STRINGFORMAT_ 定数 のいずれかを使用します。
dwAddressModesDWORD4+44+44発信元アドレスの指定方法です。このメンバーは、 LINEADDRESSMODE_ 定数 を使用します。
dwNumAddressesDWORD4+48+48この回線デバイスに関連付けられているアドレスの数です。個々のアドレスはアドレス識別子で参照されます。アドレス識別子の範囲は、0 から dwNumAddresses が示す値から 1 を引いた値までです。
dwBearerModesDWORD4+52+52アドレスがサポートできるさまざまなベアラーモードを示すフラグ配列です。このメンバーは、 LINEBEARERMODE_ 定数 の 1 つ以上を使用します。
dwMaxRateDWORD4+56+56通話上での情報交換における最大データレート(ビット/秒)。
dwMediaModesDWORD4+60+60アドレスがサポートできるさまざまなメディアタイプを示すフラグ配列です。このメンバーは、 LINEMEDIAMODE_ 定数 の 1 つ以上を使用します。
dwGenerateToneModesDWORD4+64+64この回線で生成できるトーンです。このメンバーは、 LINETONEMODE_ 定数 の 1 つ以上を使用します。
dwGenerateToneMaxNumFreqDWORD4+68+68lineGenerateTone でトーンを生成する際に、 LINEGENERATETONE データ構造を使用して一般的なトーンを記述するときに指定できる周波数の最大数です。値が 0 の場合、トーンの生成は利用できません。
dwGenerateDigitModesDWORD4+72+72この回線で生成できるダイヤル桁のモードです。このメンバーは、 LINEDIGITMODE_ 定数 の 1 つ以上を使用します。
dwMonitorToneMaxNumFreqDWORD4+76+76lineMonitorTones で一般的なトーンを監視する際に、 LINEMONITORTONE データ構造を使用して一般的なトーンを記述するときに指定できる周波数の最大数です。値が 0 の場合、トーンの監視は利用できません。
dwMonitorToneMaxNumEntriesDWORD4+80+80lineMonitorTones に渡すトーンリストで指定できるエントリの最大数です。
dwMonitorDigitModesDWORD4+84+84この回線で検出できるダイヤル桁のモードです。このメンバーは、 LINEDIGITMODE_ 定数 の 1 つ以上を使用します。
dwGatherDigitsMinTimeoutDWORD4+88+88lineGatherDigits が使用する、最初の桁のタイムアウト値と桁間のタイムアウト値の両方に指定できる最小値(ミリ秒単位)。dwGatherDigitsMinTimeoutdwGatherDigitsMaxTimeout がどちらも 0 の場合、タイムアウトはサポートされません。
dwGatherDigitsMaxTimeoutDWORD4+92+92lineGatherDigits が使用する、最初の桁のタイムアウト値と桁間のタイムアウト値の両方に指定できる最大値(ミリ秒単位)。dwGatherDigitsMinTimeoutdwGatherDigitsMaxTimeout がどちらも 0 の場合、タイムアウトはサポートされません。
dwMedCtlDigitMaxListSizeDWORD4+96+96lineSetMediaControl の桁リストパラメーターで指定できるエントリの最大数です。
dwMedCtlMediaMaxListSizeDWORD4+100+100lineSetMediaControl のメディアリストパラメーターで指定できるエントリの最大数です。
dwMedCtlToneMaxListSizeDWORD4+104+104lineSetMediaControl のトーンリストパラメーターで指定できるエントリの最大数です。
dwMedCtlCallStateMaxListSizeDWORD4+108+108lineSetMediaControl の通話状態リストパラメーターで指定できるエントリの最大数です。
dwDevCapFlagsDWORD4+112+112ブール値で表されるデバイスの機能です。このメンバーは、 LINEDEVCAPFLAGS_ 定数 の 1 つ以上を使用します。
dwMaxNumActiveCallsDWORD4+116+116回線上で同時にアクティブ(接続状態)にできる(最小帯域幅の)通話の最大数です。回線上でより広い帯域幅の通話が確立されている場合、実際のアクティブな通話数はこれより少なくなることがあります。
dwAnswerModeDWORD4+120+120回線デバイスで着信中の別の通話に応答したときに、アクティブな通話に及ぼす影響です。このメンバーは、 LINEANSWERMODE_ 定数 のいずれかを使用します。
dwRingModesDWORD4+124+124ringing(呼び出し中)の通知を伴う LINE_LINEDEVSTATE メッセージで報告できる呼び出し音モードの種類数です。呼び出し音モードの範囲は 1 から dwRingModes までです。0 は呼び出し音がないことを示します。
dwLineStatesDWORD4+128+128この回線上の LINE_LINEDEVSTATE メッセージでアプリケーションに通知される可能性がある、さまざまな回線状態の構成要素です。このメンバーは、 LINEDEVSTATE_ 定数 の 1 つ以上を使用します。
dwUUIAcceptSizeDWORD4+132+132通話の受け入れ時に送信できるユーザー間情報の最大サイズです(null 終端文字を含む)。
dwUUIAnswerSizeDWORD4+136+136通話への応答時に送信できるユーザー間情報の最大サイズです(null 終端文字を含む)。
dwUUIMakeCallSizeDWORD4+140+140発信時に送信できるユーザー間情報の最大サイズです(null 終端文字を含む)。
dwUUIDropSizeDWORD4+144+144通話の切断時に送信できるユーザー間情報の最大サイズです(null 終端文字を含む)。
dwUUISendUserUserInfoSizeDWORD4+148+148lineSendUserUserInfo を使用して、通話中の任意のタイミングで個別に送信できるユーザー間情報の最大サイズです(null 終端文字を含む)。
dwUUICallInfoSizeDWORD4+152+152LINECALLINFO 構造体で受信できるユーザー間情報の最大サイズです(null 終端文字を含む)。
MinDialParamsLINEDIALPARAMS16+156+156この回線上の通話に設定できるダイヤルパラメーターの最小値(ミリ秒単位)。ダイヤルパラメーターは、MinDialParams から MaxDialParams の範囲の値に設定できます。実際の設定の粒度はサービスプロバイダー固有です。
MaxDialParamsLINEDIALPARAMS16+172+172この回線上の通話に設定できるダイヤルパラメーターの最大値(ミリ秒単位)。ダイヤルパラメーターは、MinDialParams から MaxDialParams の範囲の値に設定できます。実際の設定の粒度はサービスプロバイダー固有です。
DefaultDialParamsLINEDIALPARAMS16+188+188この回線上の通話で使用される既定のダイヤルパラメーターです。これらのパラメーター値は、通話ごとに上書きできます。
dwNumTerminalsDWORD4+204+204この回線デバイス、そのアドレス、またはその通話に対して設定できる端末の数です。個々の端末は端末 ID で参照され、その範囲は 0 から dwNumTerminals が示す値から 1 を引いた値までです。
dwTerminalCapsSizeDWORD4+208+208LINETERMCAPS 型のエントリを持つ配列を格納する、可変サイズのデバイスフィールドのサイズ(バイト単位)。
dwTerminalCapsOffsetDWORD4+212+212この構造体の先頭から、 LINETERMCAPS 型のエントリを持つ配列を格納する可変サイズのデバイスフィールドまでのオフセットです。この配列は、0 から dwNumTerminals から 1 を引いた値までの範囲の端末 ID でインデックス付けされます。配列の各エントリは、対応する端末の端末デバイス機能を指定します。フィールドのサイズは dwTerminalCapsSize で指定されます。
dwTerminalTextEntrySizeDWORD4+216+216dwTerminalTextSizedwTerminalTextOffset が指し示す各端末の説明テキストのサイズ(null 終端文字を含む、バイト単位)。
dwTerminalTextSizeDWORD4+220+220回線で使用可能な各端末に関する説明テキストを格納する、可変サイズのフィールドのサイズ(null 終端文字を含む、バイト単位)
dwTerminalTextOffsetDWORD4+224+224この構造体の先頭から、回線で使用可能な各端末に関する説明テキストまでのオフセット(バイト単位)。各メッセージの長さは dwTerminalTextEntrySize バイトです。これらの説明テキストの文字列形式は、回線のデバイス機能の dwStringFormat で示されます。フィールドのサイズは dwTerminalTextSize で指定されます。
dwDevSpecificSizeDWORD4+228+228可変サイズのデバイス固有フィールドのサイズ(バイト単位)。デバイス固有情報が文字列へのポインターである場合、サイズには null 終端文字を含めなければなりません。
dwDevSpecificOffsetDWORD4+232+232この構造体の先頭からデバイス固有フィールドまでのオフセット(バイト単位)。フィールドのサイズは dwDevSpecificSize で指定されます。
dwLineFeaturesDWORD4+236+236LINEFEATURE_ 定数 で表される、この回線で使用できる機能です。サポートされる機能を呼び出すには、回線が適切な状態にあり、基になる回線デバイスが互換性のあるモードで開かれている必要があります。ビット位置が 0 の場合は、対応する機能が常に使用できないことを示します。1 の場合は、操作が意味を持つ適切な状態に回線があれば、対応する機能が使用できる可能性があることを示します。このメンバーにより、アプリケーションはデバイスがどの回線機能をサポートできるか(および常にサポートできないか)を知ることができます。
dwSettableDevStatusDWORD4+240+240lineSetLineDevStatus を使用して変更できる LINEDEVSTATUSFLAGS の値です。
dwDeviceClassesSizeDWORD4+244+244この回線上の 1 つ以上のアドレスでサポートされるデバイスクラス識別子を含む文字列のサイズ(null 終端文字を含む、バイト単位)。
dwDeviceClassesOffsetDWORD4+248+248この構造体の先頭から、この回線上の 1 つ以上のアドレスでサポートされるデバイスクラス識別子を含む文字列までのオフセット(バイト単位)。これらの文字列は lineGetID で使用します。各文字列は NULL で区切られ、リスト内の最後の識別子の後には NULL が 2 つ続きます。フィールドのサイズは dwDeviceClassesSize で指定されます。
PermanentLineGuidGUID16+252+252回線デバイスに永続的に関連付けられた GUID です。

公式ドキュメント

LINEDEVCAPS 構造体は、回線デバイスの機能を記述します。 lineGetDevCaps 関数および TSPI_lineGetDevCaps 関数は、 LINEDEVCAPS 構造体を返します。

解説(Remarks)

デバイス固有の拡張には、このデータ構造の DevSpecific(dwDevSpecificSizedwDevSpecificOffset)の可変サイズ領域を使用してください。

古いアプリケーションは、 LINEDEVCAPS 構造体の新しいメンバーを含まない状態でコンパイルされており、新しいサイズよりも小さい SIZEOF LINEDEVCAPS を使用します。アプリケーションは lineGetDevCaps 関数に dwAPIVersion パラメーターを渡し、TAPI はこの状況を処理する際の指針としてこれを使用できます。指定された dwAPIVersion で定義される構造体の固定部分のサイズよりも小さい dwTotalSize メンバーをアプリケーションが渡した場合、LINEERR_STRUCTURETOOSMALL が返されます。アプリケーションが十分なメモリを割り当てている場合、TAPI は TSPI_lineGetDevCaps を呼び出す前に、指定された API バージョンにおける構造体の固定サイズを dwNeededSize メンバーと dwUsedSize メンバーに設定します。

新しいアプリケーションは、ネゴシエートされた API バージョンを認識し、そのネゴシエートされた API バージョンにおける構造体の固定部分の本来の終端を超える固定部分のメンバーの内容を参照しないようにしなければなりません。

dwBearerModes メンバーで LINEBEARERMODE_DATA ビットが設定されている場合、dwMaxRate メンバーはベアラーチャネル上でのデジタル伝送の最大レートを示します。 LINEDEVCAPS 構造体の dwBearerModes メンバーに LINEBEARERMODE_DATA が設定されていない場合でも、 LINEDEVCAPS 構造体の dwMaxRate メンバーには有効な値が格納されていることがあります。

dwBearerModesLINEBEARERMODE_DATA が設定されておらず、LINEBEARERMODE_VOICE の値が設定され、かつ dwMediaModes メンバーに LINEMEDIAMODE_DATAMODEM の値が設定されている場合、dwMaxRate メンバーは、接続されているモデムまたは機能的に同等の装置の電話回線上での最大の同期(DCE)ビットレートを示します。たとえば、モデムの最速の変調速度が V.32bis の 14,400bps である場合、dwMaxRate は 14400 になります。これは最速の DTE ポートレート(多くの場合 38400、57600、または 115200)ではなく、モデムが電話回線上でサポートする最速のビットレートです。

アプリケーションは dwMaxRate メンバーを誤って解釈しないように、LINEBEARERMODE_DATA が設定されていないことを必ず確認する必要があります。LINEBEARERMODE_DATA が設定されている場合、この値は 64000 以上になる可能性が高くなります。

また、モデムが具体的に特定されていない場合(たとえば「汎用」モデムである場合)、示される数値はモデムを調べた結果に基づく「最善の推測」である点にも注意してください。

dwSettableDevStatus から dwDeviceClassesOffset までのメンバーは、TAPI バージョン 2.0 以降で回線デバイスを開いたアプリケーションでのみ使用できます。

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

各言語での定義

#include <windows.h>

// LINEDIALPARAMS  (x64 16 / x86 16 バイト)
#pragma pack(push, 1)
typedef struct LINEDIALPARAMS {
    DWORD dwDialPause;
    DWORD dwDialSpeed;
    DWORD dwDigitDuration;
    DWORD dwWaitForDialtone;
} LINEDIALPARAMS;
#pragma pack(pop)

// LINEDEVCAPS  (x64 268 / x86 268 バイト)
#pragma pack(push, 1)
typedef struct LINEDEVCAPS {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwProviderInfoSize;
    DWORD dwProviderInfoOffset;
    DWORD dwSwitchInfoSize;
    DWORD dwSwitchInfoOffset;
    DWORD dwPermanentLineID;
    DWORD dwLineNameSize;
    DWORD dwLineNameOffset;
    DWORD dwStringFormat;
    DWORD dwAddressModes;
    DWORD dwNumAddresses;
    DWORD dwBearerModes;
    DWORD dwMaxRate;
    DWORD dwMediaModes;
    DWORD dwGenerateToneModes;
    DWORD dwGenerateToneMaxNumFreq;
    DWORD dwGenerateDigitModes;
    DWORD dwMonitorToneMaxNumFreq;
    DWORD dwMonitorToneMaxNumEntries;
    DWORD dwMonitorDigitModes;
    DWORD dwGatherDigitsMinTimeout;
    DWORD dwGatherDigitsMaxTimeout;
    DWORD dwMedCtlDigitMaxListSize;
    DWORD dwMedCtlMediaMaxListSize;
    DWORD dwMedCtlToneMaxListSize;
    DWORD dwMedCtlCallStateMaxListSize;
    DWORD dwDevCapFlags;
    DWORD dwMaxNumActiveCalls;
    DWORD dwAnswerMode;
    DWORD dwRingModes;
    DWORD dwLineStates;
    DWORD dwUUIAcceptSize;
    DWORD dwUUIAnswerSize;
    DWORD dwUUIMakeCallSize;
    DWORD dwUUIDropSize;
    DWORD dwUUISendUserUserInfoSize;
    DWORD dwUUICallInfoSize;
    LINEDIALPARAMS MinDialParams;
    LINEDIALPARAMS MaxDialParams;
    LINEDIALPARAMS DefaultDialParams;
    DWORD dwNumTerminals;
    DWORD dwTerminalCapsSize;
    DWORD dwTerminalCapsOffset;
    DWORD dwTerminalTextEntrySize;
    DWORD dwTerminalTextSize;
    DWORD dwTerminalTextOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
    DWORD dwLineFeatures;
    DWORD dwSettableDevStatus;
    DWORD dwDeviceClassesSize;
    DWORD dwDeviceClassesOffset;
    GUID PermanentLineGuid;
} LINEDEVCAPS;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct LINEDIALPARAMS
{
    public uint dwDialPause;
    public uint dwDialSpeed;
    public uint dwDigitDuration;
    public uint dwWaitForDialtone;
}

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct LINEDEVCAPS
{
    public uint dwTotalSize;
    public uint dwNeededSize;
    public uint dwUsedSize;
    public uint dwProviderInfoSize;
    public uint dwProviderInfoOffset;
    public uint dwSwitchInfoSize;
    public uint dwSwitchInfoOffset;
    public uint dwPermanentLineID;
    public uint dwLineNameSize;
    public uint dwLineNameOffset;
    public uint dwStringFormat;
    public uint dwAddressModes;
    public uint dwNumAddresses;
    public uint dwBearerModes;
    public uint dwMaxRate;
    public uint dwMediaModes;
    public uint dwGenerateToneModes;
    public uint dwGenerateToneMaxNumFreq;
    public uint dwGenerateDigitModes;
    public uint dwMonitorToneMaxNumFreq;
    public uint dwMonitorToneMaxNumEntries;
    public uint dwMonitorDigitModes;
    public uint dwGatherDigitsMinTimeout;
    public uint dwGatherDigitsMaxTimeout;
    public uint dwMedCtlDigitMaxListSize;
    public uint dwMedCtlMediaMaxListSize;
    public uint dwMedCtlToneMaxListSize;
    public uint dwMedCtlCallStateMaxListSize;
    public uint dwDevCapFlags;
    public uint dwMaxNumActiveCalls;
    public uint dwAnswerMode;
    public uint dwRingModes;
    public uint dwLineStates;
    public uint dwUUIAcceptSize;
    public uint dwUUIAnswerSize;
    public uint dwUUIMakeCallSize;
    public uint dwUUIDropSize;
    public uint dwUUISendUserUserInfoSize;
    public uint dwUUICallInfoSize;
    public LINEDIALPARAMS MinDialParams;
    public LINEDIALPARAMS MaxDialParams;
    public LINEDIALPARAMS DefaultDialParams;
    public uint dwNumTerminals;
    public uint dwTerminalCapsSize;
    public uint dwTerminalCapsOffset;
    public uint dwTerminalTextEntrySize;
    public uint dwTerminalTextSize;
    public uint dwTerminalTextOffset;
    public uint dwDevSpecificSize;
    public uint dwDevSpecificOffset;
    public uint dwLineFeatures;
    public uint dwSettableDevStatus;
    public uint dwDeviceClassesSize;
    public uint dwDeviceClassesOffset;
    public Guid PermanentLineGuid;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure LINEDIALPARAMS
    Public dwDialPause As UInteger
    Public dwDialSpeed As UInteger
    Public dwDigitDuration As UInteger
    Public dwWaitForDialtone As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure LINEDEVCAPS
    Public dwTotalSize As UInteger
    Public dwNeededSize As UInteger
    Public dwUsedSize As UInteger
    Public dwProviderInfoSize As UInteger
    Public dwProviderInfoOffset As UInteger
    Public dwSwitchInfoSize As UInteger
    Public dwSwitchInfoOffset As UInteger
    Public dwPermanentLineID As UInteger
    Public dwLineNameSize As UInteger
    Public dwLineNameOffset As UInteger
    Public dwStringFormat As UInteger
    Public dwAddressModes As UInteger
    Public dwNumAddresses As UInteger
    Public dwBearerModes As UInteger
    Public dwMaxRate As UInteger
    Public dwMediaModes As UInteger
    Public dwGenerateToneModes As UInteger
    Public dwGenerateToneMaxNumFreq As UInteger
    Public dwGenerateDigitModes As UInteger
    Public dwMonitorToneMaxNumFreq As UInteger
    Public dwMonitorToneMaxNumEntries As UInteger
    Public dwMonitorDigitModes As UInteger
    Public dwGatherDigitsMinTimeout As UInteger
    Public dwGatherDigitsMaxTimeout As UInteger
    Public dwMedCtlDigitMaxListSize As UInteger
    Public dwMedCtlMediaMaxListSize As UInteger
    Public dwMedCtlToneMaxListSize As UInteger
    Public dwMedCtlCallStateMaxListSize As UInteger
    Public dwDevCapFlags As UInteger
    Public dwMaxNumActiveCalls As UInteger
    Public dwAnswerMode As UInteger
    Public dwRingModes As UInteger
    Public dwLineStates As UInteger
    Public dwUUIAcceptSize As UInteger
    Public dwUUIAnswerSize As UInteger
    Public dwUUIMakeCallSize As UInteger
    Public dwUUIDropSize As UInteger
    Public dwUUISendUserUserInfoSize As UInteger
    Public dwUUICallInfoSize As UInteger
    Public MinDialParams As LINEDIALPARAMS
    Public MaxDialParams As LINEDIALPARAMS
    Public DefaultDialParams As LINEDIALPARAMS
    Public dwNumTerminals As UInteger
    Public dwTerminalCapsSize As UInteger
    Public dwTerminalCapsOffset As UInteger
    Public dwTerminalTextEntrySize As UInteger
    Public dwTerminalTextSize As UInteger
    Public dwTerminalTextOffset As UInteger
    Public dwDevSpecificSize As UInteger
    Public dwDevSpecificOffset As UInteger
    Public dwLineFeatures As UInteger
    Public dwSettableDevStatus As UInteger
    Public dwDeviceClassesSize As UInteger
    Public dwDeviceClassesOffset As UInteger
    Public PermanentLineGuid As Guid
End Structure
import ctypes
from ctypes import wintypes

class LINEDIALPARAMS(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("dwDialPause", wintypes.DWORD),
        ("dwDialSpeed", wintypes.DWORD),
        ("dwDigitDuration", wintypes.DWORD),
        ("dwWaitForDialtone", wintypes.DWORD),
    ]

class LINEDEVCAPS(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("dwTotalSize", wintypes.DWORD),
        ("dwNeededSize", wintypes.DWORD),
        ("dwUsedSize", wintypes.DWORD),
        ("dwProviderInfoSize", wintypes.DWORD),
        ("dwProviderInfoOffset", wintypes.DWORD),
        ("dwSwitchInfoSize", wintypes.DWORD),
        ("dwSwitchInfoOffset", wintypes.DWORD),
        ("dwPermanentLineID", wintypes.DWORD),
        ("dwLineNameSize", wintypes.DWORD),
        ("dwLineNameOffset", wintypes.DWORD),
        ("dwStringFormat", wintypes.DWORD),
        ("dwAddressModes", wintypes.DWORD),
        ("dwNumAddresses", wintypes.DWORD),
        ("dwBearerModes", wintypes.DWORD),
        ("dwMaxRate", wintypes.DWORD),
        ("dwMediaModes", wintypes.DWORD),
        ("dwGenerateToneModes", wintypes.DWORD),
        ("dwGenerateToneMaxNumFreq", wintypes.DWORD),
        ("dwGenerateDigitModes", wintypes.DWORD),
        ("dwMonitorToneMaxNumFreq", wintypes.DWORD),
        ("dwMonitorToneMaxNumEntries", wintypes.DWORD),
        ("dwMonitorDigitModes", wintypes.DWORD),
        ("dwGatherDigitsMinTimeout", wintypes.DWORD),
        ("dwGatherDigitsMaxTimeout", wintypes.DWORD),
        ("dwMedCtlDigitMaxListSize", wintypes.DWORD),
        ("dwMedCtlMediaMaxListSize", wintypes.DWORD),
        ("dwMedCtlToneMaxListSize", wintypes.DWORD),
        ("dwMedCtlCallStateMaxListSize", wintypes.DWORD),
        ("dwDevCapFlags", wintypes.DWORD),
        ("dwMaxNumActiveCalls", wintypes.DWORD),
        ("dwAnswerMode", wintypes.DWORD),
        ("dwRingModes", wintypes.DWORD),
        ("dwLineStates", wintypes.DWORD),
        ("dwUUIAcceptSize", wintypes.DWORD),
        ("dwUUIAnswerSize", wintypes.DWORD),
        ("dwUUIMakeCallSize", wintypes.DWORD),
        ("dwUUIDropSize", wintypes.DWORD),
        ("dwUUISendUserUserInfoSize", wintypes.DWORD),
        ("dwUUICallInfoSize", wintypes.DWORD),
        ("MinDialParams", LINEDIALPARAMS),
        ("MaxDialParams", LINEDIALPARAMS),
        ("DefaultDialParams", LINEDIALPARAMS),
        ("dwNumTerminals", wintypes.DWORD),
        ("dwTerminalCapsSize", wintypes.DWORD),
        ("dwTerminalCapsOffset", wintypes.DWORD),
        ("dwTerminalTextEntrySize", wintypes.DWORD),
        ("dwTerminalTextSize", wintypes.DWORD),
        ("dwTerminalTextOffset", wintypes.DWORD),
        ("dwDevSpecificSize", wintypes.DWORD),
        ("dwDevSpecificOffset", wintypes.DWORD),
        ("dwLineFeatures", wintypes.DWORD),
        ("dwSettableDevStatus", wintypes.DWORD),
        ("dwDeviceClassesSize", wintypes.DWORD),
        ("dwDeviceClassesOffset", wintypes.DWORD),
        ("PermanentLineGuid", GUID),
    ]
#[repr(C, packed(1))]
pub struct LINEDIALPARAMS {
    pub dwDialPause: u32,
    pub dwDialSpeed: u32,
    pub dwDigitDuration: u32,
    pub dwWaitForDialtone: u32,
}

#[repr(C, packed(1))]
pub struct LINEDEVCAPS {
    pub dwTotalSize: u32,
    pub dwNeededSize: u32,
    pub dwUsedSize: u32,
    pub dwProviderInfoSize: u32,
    pub dwProviderInfoOffset: u32,
    pub dwSwitchInfoSize: u32,
    pub dwSwitchInfoOffset: u32,
    pub dwPermanentLineID: u32,
    pub dwLineNameSize: u32,
    pub dwLineNameOffset: u32,
    pub dwStringFormat: u32,
    pub dwAddressModes: u32,
    pub dwNumAddresses: u32,
    pub dwBearerModes: u32,
    pub dwMaxRate: u32,
    pub dwMediaModes: u32,
    pub dwGenerateToneModes: u32,
    pub dwGenerateToneMaxNumFreq: u32,
    pub dwGenerateDigitModes: u32,
    pub dwMonitorToneMaxNumFreq: u32,
    pub dwMonitorToneMaxNumEntries: u32,
    pub dwMonitorDigitModes: u32,
    pub dwGatherDigitsMinTimeout: u32,
    pub dwGatherDigitsMaxTimeout: u32,
    pub dwMedCtlDigitMaxListSize: u32,
    pub dwMedCtlMediaMaxListSize: u32,
    pub dwMedCtlToneMaxListSize: u32,
    pub dwMedCtlCallStateMaxListSize: u32,
    pub dwDevCapFlags: u32,
    pub dwMaxNumActiveCalls: u32,
    pub dwAnswerMode: u32,
    pub dwRingModes: u32,
    pub dwLineStates: u32,
    pub dwUUIAcceptSize: u32,
    pub dwUUIAnswerSize: u32,
    pub dwUUIMakeCallSize: u32,
    pub dwUUIDropSize: u32,
    pub dwUUISendUserUserInfoSize: u32,
    pub dwUUICallInfoSize: u32,
    pub MinDialParams: LINEDIALPARAMS,
    pub MaxDialParams: LINEDIALPARAMS,
    pub DefaultDialParams: LINEDIALPARAMS,
    pub dwNumTerminals: u32,
    pub dwTerminalCapsSize: u32,
    pub dwTerminalCapsOffset: u32,
    pub dwTerminalTextEntrySize: u32,
    pub dwTerminalTextSize: u32,
    pub dwTerminalTextOffset: u32,
    pub dwDevSpecificSize: u32,
    pub dwDevSpecificOffset: u32,
    pub dwLineFeatures: u32,
    pub dwSettableDevStatus: u32,
    pub dwDeviceClassesSize: u32,
    pub dwDeviceClassesOffset: u32,
    pub PermanentLineGuid: GUID,
}
import "golang.org/x/sys/windows"

type LINEDIALPARAMS struct {
	dwDialPause uint32
	dwDialSpeed uint32
	dwDigitDuration uint32
	dwWaitForDialtone uint32
}

type LINEDEVCAPS struct {
	dwTotalSize uint32
	dwNeededSize uint32
	dwUsedSize uint32
	dwProviderInfoSize uint32
	dwProviderInfoOffset uint32
	dwSwitchInfoSize uint32
	dwSwitchInfoOffset uint32
	dwPermanentLineID uint32
	dwLineNameSize uint32
	dwLineNameOffset uint32
	dwStringFormat uint32
	dwAddressModes uint32
	dwNumAddresses uint32
	dwBearerModes uint32
	dwMaxRate uint32
	dwMediaModes uint32
	dwGenerateToneModes uint32
	dwGenerateToneMaxNumFreq uint32
	dwGenerateDigitModes uint32
	dwMonitorToneMaxNumFreq uint32
	dwMonitorToneMaxNumEntries uint32
	dwMonitorDigitModes uint32
	dwGatherDigitsMinTimeout uint32
	dwGatherDigitsMaxTimeout uint32
	dwMedCtlDigitMaxListSize uint32
	dwMedCtlMediaMaxListSize uint32
	dwMedCtlToneMaxListSize uint32
	dwMedCtlCallStateMaxListSize uint32
	dwDevCapFlags uint32
	dwMaxNumActiveCalls uint32
	dwAnswerMode uint32
	dwRingModes uint32
	dwLineStates uint32
	dwUUIAcceptSize uint32
	dwUUIAnswerSize uint32
	dwUUIMakeCallSize uint32
	dwUUIDropSize uint32
	dwUUISendUserUserInfoSize uint32
	dwUUICallInfoSize uint32
	MinDialParams LINEDIALPARAMS
	MaxDialParams LINEDIALPARAMS
	DefaultDialParams LINEDIALPARAMS
	dwNumTerminals uint32
	dwTerminalCapsSize uint32
	dwTerminalCapsOffset uint32
	dwTerminalTextEntrySize uint32
	dwTerminalTextSize uint32
	dwTerminalTextOffset uint32
	dwDevSpecificSize uint32
	dwDevSpecificOffset uint32
	dwLineFeatures uint32
	dwSettableDevStatus uint32
	dwDeviceClassesSize uint32
	dwDeviceClassesOffset uint32
	PermanentLineGuid windows.GUID
}
type
  LINEDIALPARAMS = packed record
    dwDialPause: DWORD;
    dwDialSpeed: DWORD;
    dwDigitDuration: DWORD;
    dwWaitForDialtone: DWORD;
  end;

  LINEDEVCAPS = packed record
    dwTotalSize: DWORD;
    dwNeededSize: DWORD;
    dwUsedSize: DWORD;
    dwProviderInfoSize: DWORD;
    dwProviderInfoOffset: DWORD;
    dwSwitchInfoSize: DWORD;
    dwSwitchInfoOffset: DWORD;
    dwPermanentLineID: DWORD;
    dwLineNameSize: DWORD;
    dwLineNameOffset: DWORD;
    dwStringFormat: DWORD;
    dwAddressModes: DWORD;
    dwNumAddresses: DWORD;
    dwBearerModes: DWORD;
    dwMaxRate: DWORD;
    dwMediaModes: DWORD;
    dwGenerateToneModes: DWORD;
    dwGenerateToneMaxNumFreq: DWORD;
    dwGenerateDigitModes: DWORD;
    dwMonitorToneMaxNumFreq: DWORD;
    dwMonitorToneMaxNumEntries: DWORD;
    dwMonitorDigitModes: DWORD;
    dwGatherDigitsMinTimeout: DWORD;
    dwGatherDigitsMaxTimeout: DWORD;
    dwMedCtlDigitMaxListSize: DWORD;
    dwMedCtlMediaMaxListSize: DWORD;
    dwMedCtlToneMaxListSize: DWORD;
    dwMedCtlCallStateMaxListSize: DWORD;
    dwDevCapFlags: DWORD;
    dwMaxNumActiveCalls: DWORD;
    dwAnswerMode: DWORD;
    dwRingModes: DWORD;
    dwLineStates: DWORD;
    dwUUIAcceptSize: DWORD;
    dwUUIAnswerSize: DWORD;
    dwUUIMakeCallSize: DWORD;
    dwUUIDropSize: DWORD;
    dwUUISendUserUserInfoSize: DWORD;
    dwUUICallInfoSize: DWORD;
    MinDialParams: LINEDIALPARAMS;
    MaxDialParams: LINEDIALPARAMS;
    DefaultDialParams: LINEDIALPARAMS;
    dwNumTerminals: DWORD;
    dwTerminalCapsSize: DWORD;
    dwTerminalCapsOffset: DWORD;
    dwTerminalTextEntrySize: DWORD;
    dwTerminalTextSize: DWORD;
    dwTerminalTextOffset: DWORD;
    dwDevSpecificSize: DWORD;
    dwDevSpecificOffset: DWORD;
    dwLineFeatures: DWORD;
    dwSettableDevStatus: DWORD;
    dwDeviceClassesSize: DWORD;
    dwDeviceClassesOffset: DWORD;
    PermanentLineGuid: TGUID;
  end;
const LINEDIALPARAMS = extern struct {
    dwDialPause: u32,
    dwDialSpeed: u32,
    dwDigitDuration: u32,
    dwWaitForDialtone: u32,
};

const LINEDEVCAPS = extern struct {
    dwTotalSize: u32,
    dwNeededSize: u32,
    dwUsedSize: u32,
    dwProviderInfoSize: u32,
    dwProviderInfoOffset: u32,
    dwSwitchInfoSize: u32,
    dwSwitchInfoOffset: u32,
    dwPermanentLineID: u32,
    dwLineNameSize: u32,
    dwLineNameOffset: u32,
    dwStringFormat: u32,
    dwAddressModes: u32,
    dwNumAddresses: u32,
    dwBearerModes: u32,
    dwMaxRate: u32,
    dwMediaModes: u32,
    dwGenerateToneModes: u32,
    dwGenerateToneMaxNumFreq: u32,
    dwGenerateDigitModes: u32,
    dwMonitorToneMaxNumFreq: u32,
    dwMonitorToneMaxNumEntries: u32,
    dwMonitorDigitModes: u32,
    dwGatherDigitsMinTimeout: u32,
    dwGatherDigitsMaxTimeout: u32,
    dwMedCtlDigitMaxListSize: u32,
    dwMedCtlMediaMaxListSize: u32,
    dwMedCtlToneMaxListSize: u32,
    dwMedCtlCallStateMaxListSize: u32,
    dwDevCapFlags: u32,
    dwMaxNumActiveCalls: u32,
    dwAnswerMode: u32,
    dwRingModes: u32,
    dwLineStates: u32,
    dwUUIAcceptSize: u32,
    dwUUIAnswerSize: u32,
    dwUUIMakeCallSize: u32,
    dwUUIDropSize: u32,
    dwUUISendUserUserInfoSize: u32,
    dwUUICallInfoSize: u32,
    MinDialParams: LINEDIALPARAMS,
    MaxDialParams: LINEDIALPARAMS,
    DefaultDialParams: LINEDIALPARAMS,
    dwNumTerminals: u32,
    dwTerminalCapsSize: u32,
    dwTerminalCapsOffset: u32,
    dwTerminalTextEntrySize: u32,
    dwTerminalTextSize: u32,
    dwTerminalTextOffset: u32,
    dwDevSpecificSize: u32,
    dwDevSpecificOffset: u32,
    dwLineFeatures: u32,
    dwSettableDevStatus: u32,
    dwDeviceClassesSize: u32,
    dwDeviceClassesOffset: u32,
    PermanentLineGuid: GUID,
};
type
  LINEDIALPARAMS {.packed.} = object
    dwDialPause: uint32
    dwDialSpeed: uint32
    dwDigitDuration: uint32
    dwWaitForDialtone: uint32

  LINEDEVCAPS {.packed.} = object
    dwTotalSize: uint32
    dwNeededSize: uint32
    dwUsedSize: uint32
    dwProviderInfoSize: uint32
    dwProviderInfoOffset: uint32
    dwSwitchInfoSize: uint32
    dwSwitchInfoOffset: uint32
    dwPermanentLineID: uint32
    dwLineNameSize: uint32
    dwLineNameOffset: uint32
    dwStringFormat: uint32
    dwAddressModes: uint32
    dwNumAddresses: uint32
    dwBearerModes: uint32
    dwMaxRate: uint32
    dwMediaModes: uint32
    dwGenerateToneModes: uint32
    dwGenerateToneMaxNumFreq: uint32
    dwGenerateDigitModes: uint32
    dwMonitorToneMaxNumFreq: uint32
    dwMonitorToneMaxNumEntries: uint32
    dwMonitorDigitModes: uint32
    dwGatherDigitsMinTimeout: uint32
    dwGatherDigitsMaxTimeout: uint32
    dwMedCtlDigitMaxListSize: uint32
    dwMedCtlMediaMaxListSize: uint32
    dwMedCtlToneMaxListSize: uint32
    dwMedCtlCallStateMaxListSize: uint32
    dwDevCapFlags: uint32
    dwMaxNumActiveCalls: uint32
    dwAnswerMode: uint32
    dwRingModes: uint32
    dwLineStates: uint32
    dwUUIAcceptSize: uint32
    dwUUIAnswerSize: uint32
    dwUUIMakeCallSize: uint32
    dwUUIDropSize: uint32
    dwUUISendUserUserInfoSize: uint32
    dwUUICallInfoSize: uint32
    MinDialParams: LINEDIALPARAMS
    MaxDialParams: LINEDIALPARAMS
    DefaultDialParams: LINEDIALPARAMS
    dwNumTerminals: uint32
    dwTerminalCapsSize: uint32
    dwTerminalCapsOffset: uint32
    dwTerminalTextEntrySize: uint32
    dwTerminalTextSize: uint32
    dwTerminalTextOffset: uint32
    dwDevSpecificSize: uint32
    dwDevSpecificOffset: uint32
    dwLineFeatures: uint32
    dwSettableDevStatus: uint32
    dwDeviceClassesSize: uint32
    dwDeviceClassesOffset: uint32
    PermanentLineGuid: GUID
align(1)
struct LINEDIALPARAMS
{
    uint dwDialPause;
    uint dwDialSpeed;
    uint dwDigitDuration;
    uint dwWaitForDialtone;
}

align(1)
struct LINEDEVCAPS
{
    uint dwTotalSize;
    uint dwNeededSize;
    uint dwUsedSize;
    uint dwProviderInfoSize;
    uint dwProviderInfoOffset;
    uint dwSwitchInfoSize;
    uint dwSwitchInfoOffset;
    uint dwPermanentLineID;
    uint dwLineNameSize;
    uint dwLineNameOffset;
    uint dwStringFormat;
    uint dwAddressModes;
    uint dwNumAddresses;
    uint dwBearerModes;
    uint dwMaxRate;
    uint dwMediaModes;
    uint dwGenerateToneModes;
    uint dwGenerateToneMaxNumFreq;
    uint dwGenerateDigitModes;
    uint dwMonitorToneMaxNumFreq;
    uint dwMonitorToneMaxNumEntries;
    uint dwMonitorDigitModes;
    uint dwGatherDigitsMinTimeout;
    uint dwGatherDigitsMaxTimeout;
    uint dwMedCtlDigitMaxListSize;
    uint dwMedCtlMediaMaxListSize;
    uint dwMedCtlToneMaxListSize;
    uint dwMedCtlCallStateMaxListSize;
    uint dwDevCapFlags;
    uint dwMaxNumActiveCalls;
    uint dwAnswerMode;
    uint dwRingModes;
    uint dwLineStates;
    uint dwUUIAcceptSize;
    uint dwUUIAnswerSize;
    uint dwUUIMakeCallSize;
    uint dwUUIDropSize;
    uint dwUUISendUserUserInfoSize;
    uint dwUUICallInfoSize;
    LINEDIALPARAMS MinDialParams;
    LINEDIALPARAMS MaxDialParams;
    LINEDIALPARAMS DefaultDialParams;
    uint dwNumTerminals;
    uint dwTerminalCapsSize;
    uint dwTerminalCapsOffset;
    uint dwTerminalTextEntrySize;
    uint dwTerminalTextSize;
    uint dwTerminalTextOffset;
    uint dwDevSpecificSize;
    uint dwDevSpecificOffset;
    uint dwLineFeatures;
    uint dwSettableDevStatus;
    uint dwDeviceClassesSize;
    uint dwDeviceClassesOffset;
    GUID PermanentLineGuid;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; LINEDEVCAPS サイズ: 268 バイト(x64)
dim st, 67    ; 4byte整数×67(構造体サイズ 268 / 4 切り上げ)
; dwTotalSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwNeededSize : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwUsedSize : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwProviderInfoSize : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwProviderInfoOffset : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwSwitchInfoSize : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwSwitchInfoOffset : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwPermanentLineID : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwLineNameSize : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwLineNameOffset : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwStringFormat : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwAddressModes : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwNumAddresses : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwBearerModes : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; dwMaxRate : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; dwMediaModes : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; dwGenerateToneModes : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; dwGenerateToneMaxNumFreq : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; dwGenerateDigitModes : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; dwMonitorToneMaxNumFreq : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; dwMonitorToneMaxNumEntries : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; dwMonitorDigitModes : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; dwGatherDigitsMinTimeout : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; dwGatherDigitsMaxTimeout : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; dwMedCtlDigitMaxListSize : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; dwMedCtlMediaMaxListSize : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; dwMedCtlToneMaxListSize : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; dwMedCtlCallStateMaxListSize : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; dwDevCapFlags : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; dwMaxNumActiveCalls : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; dwAnswerMode : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; dwRingModes : DWORD (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; dwLineStates : DWORD (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; dwUUIAcceptSize : DWORD (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; dwUUIAnswerSize : DWORD (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; dwUUIMakeCallSize : DWORD (+140, 4byte)  st.35 = 値  /  値 = st.35   (lpoke/lpeek も可)
; dwUUIDropSize : DWORD (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; dwUUISendUserUserInfoSize : DWORD (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; dwUUICallInfoSize : DWORD (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; MinDialParams : LINEDIALPARAMS (+156, 16byte)  varptr(st)+156 を基点に操作(16byte:入れ子/配列)
; MaxDialParams : LINEDIALPARAMS (+172, 16byte)  varptr(st)+172 を基点に操作(16byte:入れ子/配列)
; DefaultDialParams : LINEDIALPARAMS (+188, 16byte)  varptr(st)+188 を基点に操作(16byte:入れ子/配列)
; dwNumTerminals : DWORD (+204, 4byte)  st.51 = 値  /  値 = st.51   (lpoke/lpeek も可)
; dwTerminalCapsSize : DWORD (+208, 4byte)  st.52 = 値  /  値 = st.52   (lpoke/lpeek も可)
; dwTerminalCapsOffset : DWORD (+212, 4byte)  st.53 = 値  /  値 = st.53   (lpoke/lpeek も可)
; dwTerminalTextEntrySize : DWORD (+216, 4byte)  st.54 = 値  /  値 = st.54   (lpoke/lpeek も可)
; dwTerminalTextSize : DWORD (+220, 4byte)  st.55 = 値  /  値 = st.55   (lpoke/lpeek も可)
; dwTerminalTextOffset : DWORD (+224, 4byte)  st.56 = 値  /  値 = st.56   (lpoke/lpeek も可)
; dwDevSpecificSize : DWORD (+228, 4byte)  st.57 = 値  /  値 = st.57   (lpoke/lpeek も可)
; dwDevSpecificOffset : DWORD (+232, 4byte)  st.58 = 値  /  値 = st.58   (lpoke/lpeek も可)
; dwLineFeatures : DWORD (+236, 4byte)  st.59 = 値  /  値 = st.59   (lpoke/lpeek も可)
; dwSettableDevStatus : DWORD (+240, 4byte)  st.60 = 値  /  値 = st.60   (lpoke/lpeek も可)
; dwDeviceClassesSize : DWORD (+244, 4byte)  st.61 = 値  /  値 = st.61   (lpoke/lpeek も可)
; dwDeviceClassesOffset : DWORD (+248, 4byte)  st.62 = 値  /  値 = st.62   (lpoke/lpeek も可)
; PermanentLineGuid : GUID (+252, 16byte)  varptr(st)+252 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global LINEDIALPARAMS, pack=1
    #field int dwDialPause
    #field int dwDialSpeed
    #field int dwDigitDuration
    #field int dwWaitForDialtone
#endstruct

#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global LINEDEVCAPS, pack=1
    #field int dwTotalSize
    #field int dwNeededSize
    #field int dwUsedSize
    #field int dwProviderInfoSize
    #field int dwProviderInfoOffset
    #field int dwSwitchInfoSize
    #field int dwSwitchInfoOffset
    #field int dwPermanentLineID
    #field int dwLineNameSize
    #field int dwLineNameOffset
    #field int dwStringFormat
    #field int dwAddressModes
    #field int dwNumAddresses
    #field int dwBearerModes
    #field int dwMaxRate
    #field int dwMediaModes
    #field int dwGenerateToneModes
    #field int dwGenerateToneMaxNumFreq
    #field int dwGenerateDigitModes
    #field int dwMonitorToneMaxNumFreq
    #field int dwMonitorToneMaxNumEntries
    #field int dwMonitorDigitModes
    #field int dwGatherDigitsMinTimeout
    #field int dwGatherDigitsMaxTimeout
    #field int dwMedCtlDigitMaxListSize
    #field int dwMedCtlMediaMaxListSize
    #field int dwMedCtlToneMaxListSize
    #field int dwMedCtlCallStateMaxListSize
    #field int dwDevCapFlags
    #field int dwMaxNumActiveCalls
    #field int dwAnswerMode
    #field int dwRingModes
    #field int dwLineStates
    #field int dwUUIAcceptSize
    #field int dwUUIAnswerSize
    #field int dwUUIMakeCallSize
    #field int dwUUIDropSize
    #field int dwUUISendUserUserInfoSize
    #field int dwUUICallInfoSize
    #field LINEDIALPARAMS MinDialParams
    #field LINEDIALPARAMS MaxDialParams
    #field LINEDIALPARAMS DefaultDialParams
    #field int dwNumTerminals
    #field int dwTerminalCapsSize
    #field int dwTerminalCapsOffset
    #field int dwTerminalTextEntrySize
    #field int dwTerminalTextSize
    #field int dwTerminalTextOffset
    #field int dwDevSpecificSize
    #field int dwDevSpecificOffset
    #field int dwLineFeatures
    #field int dwSettableDevStatus
    #field int dwDeviceClassesSize
    #field int dwDeviceClassesOffset
    #field GUID PermanentLineGuid
#endstruct

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