MILMatrixF
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| _11 | DOUBLE | 8 | +0 | +0 | 4x4 変換行列の第 1 行第 1 列の要素である。 |
| _12 | DOUBLE | 8 | +8 | +8 | 4x4 変換行列の第 1 行第 2 列の要素である。 |
| _13 | DOUBLE | 8 | +16 | +16 | 4x4 変換行列の第 1 行第 3 列の要素である。 |
| _14 | DOUBLE | 8 | +24 | +24 | 4x4 変換行列の第 1 行第 4 列の要素である。 |
| _21 | DOUBLE | 8 | +32 | +32 | 4x4 変換行列の第 2 行第 1 列の要素である。 |
| _22 | DOUBLE | 8 | +40 | +40 | 4x4 変換行列の第 2 行第 2 列の要素である。 |
| _23 | DOUBLE | 8 | +48 | +48 | 4x4 変換行列の第 2 行第 3 列の要素である。 |
| _24 | DOUBLE | 8 | +56 | +56 | 4x4 変換行列の第 2 行第 4 列の要素である。 |
| _31 | DOUBLE | 8 | +64 | +64 | 4x4 変換行列の第 3 行第 1 列の要素である。 |
| _32 | DOUBLE | 8 | +72 | +72 | 4x4 変換行列の第 3 行第 2 列の要素である。 |
| _33 | DOUBLE | 8 | +80 | +80 | 4x4 変換行列の第 3 行第 3 列の要素である。 |
| _34 | DOUBLE | 8 | +88 | +88 | 4x4 変換行列の第 3 行第 4 列の要素である。 |
| _41 | DOUBLE | 8 | +96 | +96 | 4x4 変換行列の第 4 行第 1 列の要素である。 |
| _42 | DOUBLE | 8 | +104 | +104 | 4x4 変換行列の第 4 行第 2 列の要素である。 |
| _43 | DOUBLE | 8 | +112 | +112 | 4x4 変換行列の第 4 行第 3 列の要素である。 |
| _44 | DOUBLE | 8 | +120 | +120 | 4x4 変換行列の第 4 行第 4 列の要素である。 |
各言語での定義
#include <windows.h>
// MILMatrixF (x64 128 / x86 128 バイト)
typedef struct MILMatrixF {
DOUBLE _11;
DOUBLE _12;
DOUBLE _13;
DOUBLE _14;
DOUBLE _21;
DOUBLE _22;
DOUBLE _23;
DOUBLE _24;
DOUBLE _31;
DOUBLE _32;
DOUBLE _33;
DOUBLE _34;
DOUBLE _41;
DOUBLE _42;
DOUBLE _43;
DOUBLE _44;
} MILMatrixF;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MILMatrixF
{
public double _11;
public double _12;
public double _13;
public double _14;
public double _21;
public double _22;
public double _23;
public double _24;
public double _31;
public double _32;
public double _33;
public double _34;
public double _41;
public double _42;
public double _43;
public double _44;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MILMatrixF
Public _11 As Double
Public _12 As Double
Public _13 As Double
Public _14 As Double
Public _21 As Double
Public _22 As Double
Public _23 As Double
Public _24 As Double
Public _31 As Double
Public _32 As Double
Public _33 As Double
Public _34 As Double
Public _41 As Double
Public _42 As Double
Public _43 As Double
Public _44 As Double
End Structureimport ctypes
from ctypes import wintypes
class MILMatrixF(ctypes.Structure):
_fields_ = [
("_11", ctypes.c_double),
("_12", ctypes.c_double),
("_13", ctypes.c_double),
("_14", ctypes.c_double),
("_21", ctypes.c_double),
("_22", ctypes.c_double),
("_23", ctypes.c_double),
("_24", ctypes.c_double),
("_31", ctypes.c_double),
("_32", ctypes.c_double),
("_33", ctypes.c_double),
("_34", ctypes.c_double),
("_41", ctypes.c_double),
("_42", ctypes.c_double),
("_43", ctypes.c_double),
("_44", ctypes.c_double),
]#[repr(C)]
pub struct MILMatrixF {
pub _11: f64,
pub _12: f64,
pub _13: f64,
pub _14: f64,
pub _21: f64,
pub _22: f64,
pub _23: f64,
pub _24: f64,
pub _31: f64,
pub _32: f64,
pub _33: f64,
pub _34: f64,
pub _41: f64,
pub _42: f64,
pub _43: f64,
pub _44: f64,
}import "golang.org/x/sys/windows"
type MILMatrixF struct {
_11 float64
_12 float64
_13 float64
_14 float64
_21 float64
_22 float64
_23 float64
_24 float64
_31 float64
_32 float64
_33 float64
_34 float64
_41 float64
_42 float64
_43 float64
_44 float64
}type
MILMatrixF = record
_11: Double;
_12: Double;
_13: Double;
_14: Double;
_21: Double;
_22: Double;
_23: Double;
_24: Double;
_31: Double;
_32: Double;
_33: Double;
_34: Double;
_41: Double;
_42: Double;
_43: Double;
_44: Double;
end;const MILMatrixF = extern struct {
_11: f64,
_12: f64,
_13: f64,
_14: f64,
_21: f64,
_22: f64,
_23: f64,
_24: f64,
_31: f64,
_32: f64,
_33: f64,
_34: f64,
_41: f64,
_42: f64,
_43: f64,
_44: f64,
};type
MILMatrixF {.bycopy.} = object
_11: float64
_12: float64
_13: float64
_14: float64
_21: float64
_22: float64
_23: float64
_24: float64
_31: float64
_32: float64
_33: float64
_34: float64
_41: float64
_42: float64
_43: float64
_44: float64struct MILMatrixF
{
double _11;
double _12;
double _13;
double _14;
double _21;
double _22;
double _23;
double _24;
double _31;
double _32;
double _33;
double _34;
double _41;
double _42;
double _43;
double _44;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MILMatrixF サイズ: 128 バイト(x64)
dim st, 32 ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; _11 : DOUBLE (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; _12 : DOUBLE (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; _13 : DOUBLE (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; _14 : DOUBLE (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; _21 : DOUBLE (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; _22 : DOUBLE (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; _23 : DOUBLE (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; _24 : DOUBLE (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; _31 : DOUBLE (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; _32 : DOUBLE (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; _33 : DOUBLE (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; _34 : DOUBLE (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; _41 : DOUBLE (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; _42 : DOUBLE (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; _43 : DOUBLE (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; _44 : DOUBLE (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MILMatrixF
#field double _11
#field double _12
#field double _13
#field double _14
#field double _21
#field double _22
#field double _23
#field double _24
#field double _31
#field double _32
#field double _33
#field double _34
#field double _41
#field double _42
#field double _43
#field double _44
#endstruct
stdim st, MILMatrixF ; NSTRUCT 変数を確保
st->_11 = 100
mes "_11=" + st->_11