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

DEVICEDIALOGDATA2

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

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズをバイト単位で指定する。互換性検証に使う。
pIWiaItemRootIWiaItem2*8/4+8+4WIAデバイスのルート項目を表すIWiaItem2インターフェイスへのポインタ。
dwFlagsDWORD4+16+8ダイアログ動作を制御するフラグの組み合わせを指定する。
hwndParentHWND8/4+24+12ダイアログの親ウィンドウのハンドル。NULL可。
bstrFolderNameLPWSTR8/4+32+16取得画像を保存するフォルダ名を表す文字列。
bstrFilenameLPWSTR8/4+40+20保存ファイルのベース名を表す文字列。
lNumFilesINT4+48+24pbstrFilePathsに格納された取得ファイルの個数を表す。
pbstrFilePathsLPWSTR*8/4+56+28取得した各ファイルのパス文字列配列へのポインタ。出力。
pWiaItemIWiaItem2*8/4+64+32選択された単一WIA項目を表すIWiaItem2へのポインタ。

各言語での定義

#include <windows.h>

// DEVICEDIALOGDATA2  (x64 72 / x86 36 バイト)
typedef struct DEVICEDIALOGDATA2 {
    DWORD cbSize;
    IWiaItem2* pIWiaItemRoot;
    DWORD dwFlags;
    HWND hwndParent;
    LPWSTR bstrFolderName;
    LPWSTR bstrFilename;
    INT lNumFiles;
    LPWSTR* pbstrFilePaths;
    IWiaItem2* pWiaItem;
} DEVICEDIALOGDATA2;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DEVICEDIALOGDATA2
{
    public uint cbSize;
    public IntPtr pIWiaItemRoot;
    public uint dwFlags;
    public IntPtr hwndParent;
    public IntPtr bstrFolderName;
    public IntPtr bstrFilename;
    public int lNumFiles;
    public IntPtr pbstrFilePaths;
    public IntPtr pWiaItem;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DEVICEDIALOGDATA2
    Public cbSize As UInteger
    Public pIWiaItemRoot As IntPtr
    Public dwFlags As UInteger
    Public hwndParent As IntPtr
    Public bstrFolderName As IntPtr
    Public bstrFilename As IntPtr
    Public lNumFiles As Integer
    Public pbstrFilePaths As IntPtr
    Public pWiaItem As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class DEVICEDIALOGDATA2(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("pIWiaItemRoot", ctypes.c_void_p),
        ("dwFlags", wintypes.DWORD),
        ("hwndParent", ctypes.c_void_p),
        ("bstrFolderName", ctypes.c_void_p),
        ("bstrFilename", ctypes.c_void_p),
        ("lNumFiles", ctypes.c_int),
        ("pbstrFilePaths", ctypes.c_void_p),
        ("pWiaItem", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct DEVICEDIALOGDATA2 {
    pub cbSize: u32,
    pub pIWiaItemRoot: *mut core::ffi::c_void,
    pub dwFlags: u32,
    pub hwndParent: *mut core::ffi::c_void,
    pub bstrFolderName: *mut core::ffi::c_void,
    pub bstrFilename: *mut core::ffi::c_void,
    pub lNumFiles: i32,
    pub pbstrFilePaths: *mut core::ffi::c_void,
    pub pWiaItem: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type DEVICEDIALOGDATA2 struct {
	cbSize uint32
	pIWiaItemRoot uintptr
	dwFlags uint32
	hwndParent uintptr
	bstrFolderName uintptr
	bstrFilename uintptr
	lNumFiles int32
	pbstrFilePaths uintptr
	pWiaItem uintptr
}
type
  DEVICEDIALOGDATA2 = record
    cbSize: DWORD;
    pIWiaItemRoot: Pointer;
    dwFlags: DWORD;
    hwndParent: Pointer;
    bstrFolderName: Pointer;
    bstrFilename: Pointer;
    lNumFiles: Integer;
    pbstrFilePaths: Pointer;
    pWiaItem: Pointer;
  end;
const DEVICEDIALOGDATA2 = extern struct {
    cbSize: u32,
    pIWiaItemRoot: ?*anyopaque,
    dwFlags: u32,
    hwndParent: ?*anyopaque,
    bstrFolderName: ?*anyopaque,
    bstrFilename: ?*anyopaque,
    lNumFiles: i32,
    pbstrFilePaths: ?*anyopaque,
    pWiaItem: ?*anyopaque,
};
type
  DEVICEDIALOGDATA2 {.bycopy.} = object
    cbSize: uint32
    pIWiaItemRoot: pointer
    dwFlags: uint32
    hwndParent: pointer
    bstrFolderName: pointer
    bstrFilename: pointer
    lNumFiles: int32
    pbstrFilePaths: pointer
    pWiaItem: pointer
struct DEVICEDIALOGDATA2
{
    uint cbSize;
    void* pIWiaItemRoot;
    uint dwFlags;
    void* hwndParent;
    void* bstrFolderName;
    void* bstrFilename;
    int lNumFiles;
    void* pbstrFilePaths;
    void* pWiaItem;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DEVICEDIALOGDATA2 サイズ: 36 バイト(x86)
dim st, 9    ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pIWiaItemRoot : IWiaItem2* (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwFlags : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; hwndParent : HWND (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; bstrFolderName : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; bstrFilename : LPWSTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; lNumFiles : INT (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; pbstrFilePaths : LPWSTR* (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; pWiaItem : IWiaItem2* (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DEVICEDIALOGDATA2 サイズ: 72 バイト(x64)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pIWiaItemRoot : IWiaItem2* (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; dwFlags : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; hwndParent : HWND (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; bstrFolderName : LPWSTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; bstrFilename : LPWSTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lNumFiles : INT (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; pbstrFilePaths : LPWSTR* (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; pWiaItem : IWiaItem2* (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DEVICEDIALOGDATA2
    #field int cbSize
    #field intptr pIWiaItemRoot
    #field int dwFlags
    #field intptr hwndParent
    #field intptr bstrFolderName
    #field intptr bstrFilename
    #field int lNumFiles
    #field intptr pbstrFilePaths
    #field intptr pWiaItem
#endstruct

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