ホーム › Graphics.Printing › PRINTPROCESSOROPENDATA
PRINTPROCESSOROPENDATA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| pDevMode | DEVMODEA* | 8/4 | +0 | +0 | 印刷に使用するDEVMODE構造体へのポインター。 |
| pDatatype | LPWSTR | 8/4 | +8 | +4 | 処理対象のデータ型(RAW等)を指すUnicode文字列。 |
| pParameters | LPWSTR | 8/4 | +16 | +8 | 印刷プロセッサに渡すパラメーター文字列を指すUnicode文字列。 |
| pDocumentName | LPWSTR | 8/4 | +24 | +12 | ドキュメント名を指すUnicode文字列。 |
| JobId | DWORD | 4 | +32 | +16 | 印刷ジョブの識別ID。 |
| pOutputFile | LPWSTR | 8/4 | +40 | +20 | 出力先ファイル名を指すUnicode文字列。NULL可。 |
| pPrinterName | LPWSTR | 8/4 | +48 | +24 | 対象プリンター名を指すUnicode文字列。 |
各言語での定義
#include <windows.h>
// PRINTPROCESSOROPENDATA (x64 56 / x86 28 バイト)
typedef struct PRINTPROCESSOROPENDATA {
DEVMODEA* pDevMode;
LPWSTR pDatatype;
LPWSTR pParameters;
LPWSTR pDocumentName;
DWORD JobId;
LPWSTR pOutputFile;
LPWSTR pPrinterName;
} PRINTPROCESSOROPENDATA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PRINTPROCESSOROPENDATA
{
public IntPtr pDevMode;
public IntPtr pDatatype;
public IntPtr pParameters;
public IntPtr pDocumentName;
public uint JobId;
public IntPtr pOutputFile;
public IntPtr pPrinterName;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PRINTPROCESSOROPENDATA
Public pDevMode As IntPtr
Public pDatatype As IntPtr
Public pParameters As IntPtr
Public pDocumentName As IntPtr
Public JobId As UInteger
Public pOutputFile As IntPtr
Public pPrinterName As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class PRINTPROCESSOROPENDATA(ctypes.Structure):
_fields_ = [
("pDevMode", ctypes.c_void_p),
("pDatatype", ctypes.c_void_p),
("pParameters", ctypes.c_void_p),
("pDocumentName", ctypes.c_void_p),
("JobId", wintypes.DWORD),
("pOutputFile", ctypes.c_void_p),
("pPrinterName", ctypes.c_void_p),
]#[repr(C)]
pub struct PRINTPROCESSOROPENDATA {
pub pDevMode: *mut core::ffi::c_void,
pub pDatatype: *mut core::ffi::c_void,
pub pParameters: *mut core::ffi::c_void,
pub pDocumentName: *mut core::ffi::c_void,
pub JobId: u32,
pub pOutputFile: *mut core::ffi::c_void,
pub pPrinterName: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type PRINTPROCESSOROPENDATA struct {
pDevMode uintptr
pDatatype uintptr
pParameters uintptr
pDocumentName uintptr
JobId uint32
pOutputFile uintptr
pPrinterName uintptr
}type
PRINTPROCESSOROPENDATA = record
pDevMode: Pointer;
pDatatype: Pointer;
pParameters: Pointer;
pDocumentName: Pointer;
JobId: DWORD;
pOutputFile: Pointer;
pPrinterName: Pointer;
end;const PRINTPROCESSOROPENDATA = extern struct {
pDevMode: ?*anyopaque,
pDatatype: ?*anyopaque,
pParameters: ?*anyopaque,
pDocumentName: ?*anyopaque,
JobId: u32,
pOutputFile: ?*anyopaque,
pPrinterName: ?*anyopaque,
};type
PRINTPROCESSOROPENDATA {.bycopy.} = object
pDevMode: pointer
pDatatype: pointer
pParameters: pointer
pDocumentName: pointer
JobId: uint32
pOutputFile: pointer
pPrinterName: pointerstruct PRINTPROCESSOROPENDATA
{
void* pDevMode;
void* pDatatype;
void* pParameters;
void* pDocumentName;
uint JobId;
void* pOutputFile;
void* pPrinterName;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PRINTPROCESSOROPENDATA サイズ: 28 バイト(x86)
dim st, 7 ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; pDevMode : DEVMODEA* (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; pDatatype : LPWSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pParameters : LPWSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pDocumentName : LPWSTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; JobId : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pOutputFile : LPWSTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; pPrinterName : LPWSTR (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PRINTPROCESSOROPENDATA サイズ: 56 バイト(x64)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; pDevMode : DEVMODEA* (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; pDatatype : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pParameters : LPWSTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pDocumentName : LPWSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; JobId : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; pOutputFile : LPWSTR (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; pPrinterName : LPWSTR (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PRINTPROCESSOROPENDATA
#field intptr pDevMode
#field intptr pDatatype
#field intptr pParameters
#field intptr pDocumentName
#field int JobId
#field intptr pOutputFile
#field intptr pPrinterName
#endstruct
stdim st, PRINTPROCESSOROPENDATA ; NSTRUCT 変数を確保
st->JobId = 100
mes "JobId=" + st->JobId