ホーム › Devices.Display › FLOATOBJ_XFORM
FLOATOBJ_XFORM
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| eM11 | FLOATOBJ | 8 | +0 | +0 | 変換行列の(1,1)成分。FLOATまたはFLOATOBJ型で保持する。 |
| eM12 | FLOATOBJ | 8 | +8 | +8 | 変換行列の(1,2)成分。 |
| eM21 | FLOATOBJ | 8 | +16 | +16 | 変換行列の(2,1)成分。 |
| eM22 | FLOATOBJ | 8 | +24 | +24 | 変換行列の(2,2)成分。 |
| eDx | FLOATOBJ | 8 | +32 | +32 | X方向の平行移動量。 |
| eDy | FLOATOBJ | 8 | +40 | +40 | Y方向の平行移動量。 |
各言語での定義
#include <windows.h>
// FLOATOBJ (x64 8 / x86 8 バイト)
typedef struct FLOATOBJ {
DWORD ul1;
DWORD ul2;
} FLOATOBJ;
// FLOATOBJ_XFORM (x64 48 / x86 48 バイト)
typedef struct FLOATOBJ_XFORM {
FLOATOBJ eM11;
FLOATOBJ eM12;
FLOATOBJ eM21;
FLOATOBJ eM22;
FLOATOBJ eDx;
FLOATOBJ eDy;
} FLOATOBJ_XFORM;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FLOATOBJ
{
public uint ul1;
public uint ul2;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FLOATOBJ_XFORM
{
public FLOATOBJ eM11;
public FLOATOBJ eM12;
public FLOATOBJ eM21;
public FLOATOBJ eM22;
public FLOATOBJ eDx;
public FLOATOBJ eDy;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FLOATOBJ
Public ul1 As UInteger
Public ul2 As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FLOATOBJ_XFORM
Public eM11 As FLOATOBJ
Public eM12 As FLOATOBJ
Public eM21 As FLOATOBJ
Public eM22 As FLOATOBJ
Public eDx As FLOATOBJ
Public eDy As FLOATOBJ
End Structureimport ctypes
from ctypes import wintypes
class FLOATOBJ(ctypes.Structure):
_fields_ = [
("ul1", wintypes.DWORD),
("ul2", wintypes.DWORD),
]
class FLOATOBJ_XFORM(ctypes.Structure):
_fields_ = [
("eM11", FLOATOBJ),
("eM12", FLOATOBJ),
("eM21", FLOATOBJ),
("eM22", FLOATOBJ),
("eDx", FLOATOBJ),
("eDy", FLOATOBJ),
]#[repr(C)]
pub struct FLOATOBJ {
pub ul1: u32,
pub ul2: u32,
}
#[repr(C)]
pub struct FLOATOBJ_XFORM {
pub eM11: FLOATOBJ,
pub eM12: FLOATOBJ,
pub eM21: FLOATOBJ,
pub eM22: FLOATOBJ,
pub eDx: FLOATOBJ,
pub eDy: FLOATOBJ,
}import "golang.org/x/sys/windows"
type FLOATOBJ struct {
ul1 uint32
ul2 uint32
}
type FLOATOBJ_XFORM struct {
eM11 FLOATOBJ
eM12 FLOATOBJ
eM21 FLOATOBJ
eM22 FLOATOBJ
eDx FLOATOBJ
eDy FLOATOBJ
}type
FLOATOBJ = record
ul1: DWORD;
ul2: DWORD;
end;
FLOATOBJ_XFORM = record
eM11: FLOATOBJ;
eM12: FLOATOBJ;
eM21: FLOATOBJ;
eM22: FLOATOBJ;
eDx: FLOATOBJ;
eDy: FLOATOBJ;
end;const FLOATOBJ = extern struct {
ul1: u32,
ul2: u32,
};
const FLOATOBJ_XFORM = extern struct {
eM11: FLOATOBJ,
eM12: FLOATOBJ,
eM21: FLOATOBJ,
eM22: FLOATOBJ,
eDx: FLOATOBJ,
eDy: FLOATOBJ,
};type
FLOATOBJ {.bycopy.} = object
ul1: uint32
ul2: uint32
FLOATOBJ_XFORM {.bycopy.} = object
eM11: FLOATOBJ
eM12: FLOATOBJ
eM21: FLOATOBJ
eM22: FLOATOBJ
eDx: FLOATOBJ
eDy: FLOATOBJstruct FLOATOBJ
{
uint ul1;
uint ul2;
}
struct FLOATOBJ_XFORM
{
FLOATOBJ eM11;
FLOATOBJ eM12;
FLOATOBJ eM21;
FLOATOBJ eM22;
FLOATOBJ eDx;
FLOATOBJ eDy;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FLOATOBJ_XFORM サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; eM11 : FLOATOBJ (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; eM12 : FLOATOBJ (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; eM21 : FLOATOBJ (+16, 8byte) varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; eM22 : FLOATOBJ (+24, 8byte) varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; eDx : FLOATOBJ (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; eDy : FLOATOBJ (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FLOATOBJ
#field int ul1
#field int ul2
#endstruct
#defstruct global FLOATOBJ_XFORM
#field FLOATOBJ eM11
#field FLOATOBJ eM12
#field FLOATOBJ eM21
#field FLOATOBJ eM22
#field FLOATOBJ eDx
#field FLOATOBJ eDy
#endstruct
stdim st, FLOATOBJ_XFORM ; NSTRUCT 変数を確保