ホーム › Media.Audio.Apo › APO_REG_PROPERTIES
APO_REG_PROPERTIES
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| clsid | GUID | 16 | +0 | +0 | APOを識別するクラスID(CLSID)。 |
| Flags | APO_FLAG | 4 | +16 | +16 | APOの能力や属性を示すフラグ(APO_FLAG)。インプレース処理可否等。 |
| szFriendlyName | WCHAR | 512 | +20 | +20 | APOの表示名を格納するUnicode文字配列。 |
| szCopyrightInfo | WCHAR | 512 | +532 | +532 | 著作権情報を格納するUnicode文字配列。 |
| u32MajorVersion | DWORD | 4 | +1044 | +1044 | APOのメジャーバージョン番号。 |
| u32MinorVersion | DWORD | 4 | +1048 | +1048 | APOのマイナーバージョン番号。 |
| u32MinInputConnections | DWORD | 4 | +1052 | +1052 | 必要な最小入力接続数。 |
| u32MaxInputConnections | DWORD | 4 | +1056 | +1056 | 許容される最大入力接続数。 |
| u32MinOutputConnections | DWORD | 4 | +1060 | +1060 | 必要な最小出力接続数。 |
| u32MaxOutputConnections | DWORD | 4 | +1064 | +1064 | 許容される最大出力接続数。 |
| u32MaxInstances | DWORD | 4 | +1068 | +1068 | 同時に存在できるAPOインスタンスの最大数。 |
| u32NumAPOInterfaces | DWORD | 4 | +1072 | +1072 | iidAPOInterfaceList配列に含まれるインターフェイス数。 |
| iidAPOInterfaceList | GUID | 16 | +1076 | +1076 | APOが実装するインターフェイスのIID配列。 |
各言語での定義
#include <windows.h>
// APO_REG_PROPERTIES (x64 1092 / x86 1092 バイト)
typedef struct APO_REG_PROPERTIES {
GUID clsid;
APO_FLAG Flags;
WCHAR szFriendlyName[256];
WCHAR szCopyrightInfo[256];
DWORD u32MajorVersion;
DWORD u32MinorVersion;
DWORD u32MinInputConnections;
DWORD u32MaxInputConnections;
DWORD u32MinOutputConnections;
DWORD u32MaxOutputConnections;
DWORD u32MaxInstances;
DWORD u32NumAPOInterfaces;
GUID iidAPOInterfaceList[1];
} APO_REG_PROPERTIES;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct APO_REG_PROPERTIES
{
public Guid clsid;
public int Flags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string szFriendlyName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string szCopyrightInfo;
public uint u32MajorVersion;
public uint u32MinorVersion;
public uint u32MinInputConnections;
public uint u32MaxInputConnections;
public uint u32MinOutputConnections;
public uint u32MaxOutputConnections;
public uint u32MaxInstances;
public uint u32NumAPOInterfaces;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public Guid[] iidAPOInterfaceList;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure APO_REG_PROPERTIES
Public clsid As Guid
Public Flags As Integer
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public szFriendlyName As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public szCopyrightInfo As String
Public u32MajorVersion As UInteger
Public u32MinorVersion As UInteger
Public u32MinInputConnections As UInteger
Public u32MaxInputConnections As UInteger
Public u32MinOutputConnections As UInteger
Public u32MaxOutputConnections As UInteger
Public u32MaxInstances As UInteger
Public u32NumAPOInterfaces As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public iidAPOInterfaceList() As Guid
End Structureimport ctypes
from ctypes import wintypes
class APO_REG_PROPERTIES(ctypes.Structure):
_fields_ = [
("clsid", GUID),
("Flags", ctypes.c_int),
("szFriendlyName", ctypes.c_wchar * 256),
("szCopyrightInfo", ctypes.c_wchar * 256),
("u32MajorVersion", wintypes.DWORD),
("u32MinorVersion", wintypes.DWORD),
("u32MinInputConnections", wintypes.DWORD),
("u32MaxInputConnections", wintypes.DWORD),
("u32MinOutputConnections", wintypes.DWORD),
("u32MaxOutputConnections", wintypes.DWORD),
("u32MaxInstances", wintypes.DWORD),
("u32NumAPOInterfaces", wintypes.DWORD),
("iidAPOInterfaceList", GUID * 1),
]#[repr(C)]
pub struct APO_REG_PROPERTIES {
pub clsid: GUID,
pub Flags: i32,
pub szFriendlyName: [u16; 256],
pub szCopyrightInfo: [u16; 256],
pub u32MajorVersion: u32,
pub u32MinorVersion: u32,
pub u32MinInputConnections: u32,
pub u32MaxInputConnections: u32,
pub u32MinOutputConnections: u32,
pub u32MaxOutputConnections: u32,
pub u32MaxInstances: u32,
pub u32NumAPOInterfaces: u32,
pub iidAPOInterfaceList: [GUID; 1],
}import "golang.org/x/sys/windows"
type APO_REG_PROPERTIES struct {
clsid windows.GUID
Flags int32
szFriendlyName [256]uint16
szCopyrightInfo [256]uint16
u32MajorVersion uint32
u32MinorVersion uint32
u32MinInputConnections uint32
u32MaxInputConnections uint32
u32MinOutputConnections uint32
u32MaxOutputConnections uint32
u32MaxInstances uint32
u32NumAPOInterfaces uint32
iidAPOInterfaceList [1]windows.GUID
}type
APO_REG_PROPERTIES = record
clsid: TGUID;
Flags: Integer;
szFriendlyName: array[0..255] of WideChar;
szCopyrightInfo: array[0..255] of WideChar;
u32MajorVersion: DWORD;
u32MinorVersion: DWORD;
u32MinInputConnections: DWORD;
u32MaxInputConnections: DWORD;
u32MinOutputConnections: DWORD;
u32MaxOutputConnections: DWORD;
u32MaxInstances: DWORD;
u32NumAPOInterfaces: DWORD;
iidAPOInterfaceList: array[0..0] of TGUID;
end;const APO_REG_PROPERTIES = extern struct {
clsid: GUID,
Flags: i32,
szFriendlyName: [256]u16,
szCopyrightInfo: [256]u16,
u32MajorVersion: u32,
u32MinorVersion: u32,
u32MinInputConnections: u32,
u32MaxInputConnections: u32,
u32MinOutputConnections: u32,
u32MaxOutputConnections: u32,
u32MaxInstances: u32,
u32NumAPOInterfaces: u32,
iidAPOInterfaceList: [1]GUID,
};type
APO_REG_PROPERTIES {.bycopy.} = object
clsid: GUID
Flags: int32
szFriendlyName: array[256, uint16]
szCopyrightInfo: array[256, uint16]
u32MajorVersion: uint32
u32MinorVersion: uint32
u32MinInputConnections: uint32
u32MaxInputConnections: uint32
u32MinOutputConnections: uint32
u32MaxOutputConnections: uint32
u32MaxInstances: uint32
u32NumAPOInterfaces: uint32
iidAPOInterfaceList: array[1, GUID]struct APO_REG_PROPERTIES
{
GUID clsid;
int Flags;
wchar[256] szFriendlyName;
wchar[256] szCopyrightInfo;
uint u32MajorVersion;
uint u32MinorVersion;
uint u32MinInputConnections;
uint u32MaxInputConnections;
uint u32MinOutputConnections;
uint u32MaxOutputConnections;
uint u32MaxInstances;
uint u32NumAPOInterfaces;
GUID[1] iidAPOInterfaceList;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; APO_REG_PROPERTIES サイズ: 1092 バイト(x64)
dim st, 273 ; 4byte整数×273(構造体サイズ 1092 / 4 切り上げ)
; clsid : GUID (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; Flags : APO_FLAG (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; szFriendlyName : WCHAR (+20, 512byte) varptr(st)+20 を基点に操作(512byte:入れ子/配列)
; szCopyrightInfo : WCHAR (+532, 512byte) varptr(st)+532 を基点に操作(512byte:入れ子/配列)
; u32MajorVersion : DWORD (+1044, 4byte) st.261 = 値 / 値 = st.261 (lpoke/lpeek も可)
; u32MinorVersion : DWORD (+1048, 4byte) st.262 = 値 / 値 = st.262 (lpoke/lpeek も可)
; u32MinInputConnections : DWORD (+1052, 4byte) st.263 = 値 / 値 = st.263 (lpoke/lpeek も可)
; u32MaxInputConnections : DWORD (+1056, 4byte) st.264 = 値 / 値 = st.264 (lpoke/lpeek も可)
; u32MinOutputConnections : DWORD (+1060, 4byte) st.265 = 値 / 値 = st.265 (lpoke/lpeek も可)
; u32MaxOutputConnections : DWORD (+1064, 4byte) st.266 = 値 / 値 = st.266 (lpoke/lpeek も可)
; u32MaxInstances : DWORD (+1068, 4byte) st.267 = 値 / 値 = st.267 (lpoke/lpeek も可)
; u32NumAPOInterfaces : DWORD (+1072, 4byte) st.268 = 値 / 値 = st.268 (lpoke/lpeek も可)
; iidAPOInterfaceList : GUID (+1076, 16byte) varptr(st)+1076 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global APO_REG_PROPERTIES
#field GUID clsid
#field int Flags
#field wchar szFriendlyName 256
#field wchar szCopyrightInfo 256
#field int u32MajorVersion
#field int u32MinorVersion
#field int u32MinInputConnections
#field int u32MaxInputConnections
#field int u32MinOutputConnections
#field int u32MaxOutputConnections
#field int u32MaxInstances
#field int u32NumAPOInterfaces
#field GUID iidAPOInterfaceList 1
#endstruct
stdim st, APO_REG_PROPERTIES ; NSTRUCT 変数を確保
st->Flags = 100
mes "Flags=" + st->Flags