ホーム › Devices.ImageAcquisition › DEVICEDIALOGDATA2
DEVICEDIALOGDATA2
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | この構造体のサイズをバイト単位で指定する。互換性検証に使う。 |
| pIWiaItemRoot | IWiaItem2* | 8/4 | +8 | +4 | WIAデバイスのルート項目を表すIWiaItem2インターフェイスへのポインタ。 |
| dwFlags | DWORD | 4 | +16 | +8 | ダイアログ動作を制御するフラグの組み合わせを指定する。 |
| hwndParent | HWND | 8/4 | +24 | +12 | ダイアログの親ウィンドウのハンドル。NULL可。 |
| bstrFolderName | LPWSTR | 8/4 | +32 | +16 | 取得画像を保存するフォルダ名を表す文字列。 |
| bstrFilename | LPWSTR | 8/4 | +40 | +20 | 保存ファイルのベース名を表す文字列。 |
| lNumFiles | INT | 4 | +48 | +24 | pbstrFilePathsに格納された取得ファイルの個数を表す。 |
| pbstrFilePaths | LPWSTR* | 8/4 | +56 | +28 | 取得した各ファイルのパス文字列配列へのポインタ。出力。 |
| pWiaItem | IWiaItem2* | 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 Structureimport 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: pointerstruct 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