ホーム › System.SystemServices › IMPORT_OBJECT_HEADER
IMPORT_OBJECT_HEADER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Sig1 | WORD | 2 | +0 | +0 | インポートオブジェクトの第1シグネチャ(0)。 |
| Sig2 | WORD | 2 | +2 | +2 | 第2シグネチャ(0xFFFF)。 |
| Version | WORD | 2 | +4 | +4 | ヘッダー形式のバージョン番号。 |
| Machine | WORD | 2 | +6 | +6 | 対象マシン種別。 |
| TimeDateStamp | DWORD | 4 | +8 | +8 | 作成日時のタイムスタンプ。 |
| SizeOfData | DWORD | 4 | +12 | +12 | 続く文字列データのサイズをバイト単位で示す。 |
| Anonymous | _Anonymous_e__Union | 2 | +16 | +16 | 序数またはヒントを保持する無名共用体。 |
| _bitfield | WORD | 2 | +18 | +18 | インポート種別・名前種別・予約ビットをまとめたビットフィールド。 |
共用体: _Anonymous_e__Union x64 2B / x86 2B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| Ordinal | WORD | 2 | +0 | +0 |
| Hint | WORD | 2 | +0 | +0 |
各言語での定義
#include <windows.h>
// IMPORT_OBJECT_HEADER (x64 20 / x86 20 バイト)
typedef struct IMPORT_OBJECT_HEADER {
WORD Sig1;
WORD Sig2;
WORD Version;
WORD Machine;
DWORD TimeDateStamp;
DWORD SizeOfData;
_Anonymous_e__Union Anonymous;
WORD _bitfield;
} IMPORT_OBJECT_HEADER;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IMPORT_OBJECT_HEADER
{
public ushort Sig1;
public ushort Sig2;
public ushort Version;
public ushort Machine;
public uint TimeDateStamp;
public uint SizeOfData;
public _Anonymous_e__Union Anonymous;
public ushort _bitfield;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IMPORT_OBJECT_HEADER
Public Sig1 As UShort
Public Sig2 As UShort
Public Version As UShort
Public Machine As UShort
Public TimeDateStamp As UInteger
Public SizeOfData As UInteger
Public Anonymous As _Anonymous_e__Union
Public _bitfield As UShort
End Structureimport ctypes
from ctypes import wintypes
class IMPORT_OBJECT_HEADER(ctypes.Structure):
_fields_ = [
("Sig1", ctypes.c_ushort),
("Sig2", ctypes.c_ushort),
("Version", ctypes.c_ushort),
("Machine", ctypes.c_ushort),
("TimeDateStamp", wintypes.DWORD),
("SizeOfData", wintypes.DWORD),
("Anonymous", _Anonymous_e__Union),
("_bitfield", ctypes.c_ushort),
]#[repr(C)]
pub struct IMPORT_OBJECT_HEADER {
pub Sig1: u16,
pub Sig2: u16,
pub Version: u16,
pub Machine: u16,
pub TimeDateStamp: u32,
pub SizeOfData: u32,
pub Anonymous: _Anonymous_e__Union,
pub _bitfield: u16,
}import "golang.org/x/sys/windows"
type IMPORT_OBJECT_HEADER struct {
Sig1 uint16
Sig2 uint16
Version uint16
Machine uint16
TimeDateStamp uint32
SizeOfData uint32
Anonymous _Anonymous_e__Union
_bitfield uint16
}type
IMPORT_OBJECT_HEADER = record
Sig1: Word;
Sig2: Word;
Version: Word;
Machine: Word;
TimeDateStamp: DWORD;
SizeOfData: DWORD;
Anonymous: _Anonymous_e__Union;
_bitfield: Word;
end;const IMPORT_OBJECT_HEADER = extern struct {
Sig1: u16,
Sig2: u16,
Version: u16,
Machine: u16,
TimeDateStamp: u32,
SizeOfData: u32,
Anonymous: _Anonymous_e__Union,
_bitfield: u16,
};type
IMPORT_OBJECT_HEADER {.bycopy.} = object
Sig1: uint16
Sig2: uint16
Version: uint16
Machine: uint16
TimeDateStamp: uint32
SizeOfData: uint32
Anonymous: _Anonymous_e__Union
_bitfield: uint16struct IMPORT_OBJECT_HEADER
{
ushort Sig1;
ushort Sig2;
ushort Version;
ushort Machine;
uint TimeDateStamp;
uint SizeOfData;
_Anonymous_e__Union Anonymous;
ushort _bitfield;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IMPORT_OBJECT_HEADER サイズ: 20 バイト(x64)
dim st, 5 ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; Sig1 : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; Sig2 : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; Version : WORD (+4, 2byte) wpoke st,4,値 / 値 = wpeek(st,4)
; Machine : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; TimeDateStamp : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; SizeOfData : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; Anonymous : _Anonymous_e__Union (+16, 2byte) varptr(st)+16 を基点に操作(2byte:入れ子/配列)
; _bitfield : WORD (+18, 2byte) wpoke st,18,値 / 値 = wpeek(st,18)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global IMPORT_OBJECT_HEADER
#field short Sig1
#field short Sig2
#field short Version
#field short Machine
#field int TimeDateStamp
#field int SizeOfData
#field byte Anonymous 2
#field short _bitfield
#endstruct
stdim st, IMPORT_OBJECT_HEADER ; NSTRUCT 変数を確保
st->Sig1 = 100
mes "Sig1=" + st->Sig1
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。