ホーム › Devices.Display › EMFINFO
EMFINFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| nSize | DWORD | 4 | +0 | +0 | この構造体のバイトサイズ。 |
| hdc | HDC | 8/4 | +8 | +4 | 拡張メタファイルに関連付けられたデバイスコンテキストのハンドル。 |
| pvEMF | BYTE* | 8/4 | +16 | +8 | EMFデータの先頭へのバイトポインタ。 |
| pvCurrentRecord | BYTE* | 8/4 | +24 | +12 | 現在処理中のEMFレコードへのバイトポインタ。 |
各言語での定義
#include <windows.h>
// EMFINFO (x64 32 / x86 16 バイト)
typedef struct EMFINFO {
DWORD nSize;
HDC hdc;
BYTE* pvEMF;
BYTE* pvCurrentRecord;
} EMFINFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EMFINFO
{
public uint nSize;
public IntPtr hdc;
public IntPtr pvEMF;
public IntPtr pvCurrentRecord;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EMFINFO
Public nSize As UInteger
Public hdc As IntPtr
Public pvEMF As IntPtr
Public pvCurrentRecord As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class EMFINFO(ctypes.Structure):
_fields_ = [
("nSize", wintypes.DWORD),
("hdc", ctypes.c_void_p),
("pvEMF", ctypes.c_void_p),
("pvCurrentRecord", ctypes.c_void_p),
]#[repr(C)]
pub struct EMFINFO {
pub nSize: u32,
pub hdc: *mut core::ffi::c_void,
pub pvEMF: *mut core::ffi::c_void,
pub pvCurrentRecord: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type EMFINFO struct {
nSize uint32
hdc uintptr
pvEMF uintptr
pvCurrentRecord uintptr
}type
EMFINFO = record
nSize: DWORD;
hdc: Pointer;
pvEMF: Pointer;
pvCurrentRecord: Pointer;
end;const EMFINFO = extern struct {
nSize: u32,
hdc: ?*anyopaque,
pvEMF: ?*anyopaque,
pvCurrentRecord: ?*anyopaque,
};type
EMFINFO {.bycopy.} = object
nSize: uint32
hdc: pointer
pvEMF: pointer
pvCurrentRecord: pointerstruct EMFINFO
{
uint nSize;
void* hdc;
void* pvEMF;
void* pvCurrentRecord;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; EMFINFO サイズ: 16 バイト(x86)
dim st, 4 ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; nSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hdc : HDC (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pvEMF : BYTE* (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pvCurrentRecord : BYTE* (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; EMFINFO サイズ: 32 バイト(x64)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; nSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hdc : HDC (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pvEMF : BYTE* (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pvCurrentRecord : BYTE* (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global EMFINFO
#field int nSize
#field intptr hdc
#field intptr pvEMF
#field intptr pvCurrentRecord
#endstruct
stdim st, EMFINFO ; NSTRUCT 変数を確保
st->nSize = 100
mes "nSize=" + st->nSize