ホーム › System.WindowsProgramming › PERUSERSECTIONA
PERUSERSECTIONA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| szGUID | CHAR | 59 | +0 | +0 | ユーザーごとのスタブを識別するGUID文字列(ANSI)。 |
| szDispName | CHAR | 128 | +59 | +59 | 表示名を表すCHAR配列(ANSI)。 |
| szLocale | CHAR | 10 | +187 | +187 | ロケールを表すCHAR配列(ANSI)。 |
| szStub | CHAR | 1040 | +197 | +197 | スタブ情報を表すCHAR配列(ANSI)。 |
| szVersion | CHAR | 32 | +1237 | +1237 | バージョン文字列(ANSI)。 |
| szCompID | CHAR | 128 | +1269 | +1269 | コンポーネントIDを表すCHAR配列(ANSI)。 |
| dwIsInstalled | DWORD | 4 | +1400 | +1400 | インストール済みか否かを示す値。 |
| bRollback | BOOL | 4 | +1404 | +1404 | ロールバックが必要か否かを示すBOOL。 |
各言語での定義
#include <windows.h>
// PERUSERSECTIONA (x64 1408 / x86 1408 バイト)
typedef struct PERUSERSECTIONA {
CHAR szGUID[59];
CHAR szDispName[128];
CHAR szLocale[10];
CHAR szStub[1040];
CHAR szVersion[32];
CHAR szCompID[128];
DWORD dwIsInstalled;
BOOL bRollback;
} PERUSERSECTIONA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PERUSERSECTIONA
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 59)] public sbyte[] szGUID;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public sbyte[] szDispName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public sbyte[] szLocale;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1040)] public sbyte[] szStub;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public sbyte[] szVersion;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public sbyte[] szCompID;
public uint dwIsInstalled;
[MarshalAs(UnmanagedType.Bool)] public bool bRollback;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PERUSERSECTIONA
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=59)> Public szGUID() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=128)> Public szDispName() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> Public szLocale() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1040)> Public szStub() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public szVersion() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=128)> Public szCompID() As SByte
Public dwIsInstalled As UInteger
<MarshalAs(UnmanagedType.Bool)> Public bRollback As Boolean
End Structureimport ctypes
from ctypes import wintypes
class PERUSERSECTIONA(ctypes.Structure):
_fields_ = [
("szGUID", ctypes.c_byte * 59),
("szDispName", ctypes.c_byte * 128),
("szLocale", ctypes.c_byte * 10),
("szStub", ctypes.c_byte * 1040),
("szVersion", ctypes.c_byte * 32),
("szCompID", ctypes.c_byte * 128),
("dwIsInstalled", wintypes.DWORD),
("bRollback", wintypes.BOOL),
]#[repr(C)]
pub struct PERUSERSECTIONA {
pub szGUID: [i8; 59],
pub szDispName: [i8; 128],
pub szLocale: [i8; 10],
pub szStub: [i8; 1040],
pub szVersion: [i8; 32],
pub szCompID: [i8; 128],
pub dwIsInstalled: u32,
pub bRollback: i32,
}import "golang.org/x/sys/windows"
type PERUSERSECTIONA struct {
szGUID [59]int8
szDispName [128]int8
szLocale [10]int8
szStub [1040]int8
szVersion [32]int8
szCompID [128]int8
dwIsInstalled uint32
bRollback int32
}type
PERUSERSECTIONA = record
szGUID: array[0..58] of Shortint;
szDispName: array[0..127] of Shortint;
szLocale: array[0..9] of Shortint;
szStub: array[0..1039] of Shortint;
szVersion: array[0..31] of Shortint;
szCompID: array[0..127] of Shortint;
dwIsInstalled: DWORD;
bRollback: BOOL;
end;const PERUSERSECTIONA = extern struct {
szGUID: [59]i8,
szDispName: [128]i8,
szLocale: [10]i8,
szStub: [1040]i8,
szVersion: [32]i8,
szCompID: [128]i8,
dwIsInstalled: u32,
bRollback: i32,
};type
PERUSERSECTIONA {.bycopy.} = object
szGUID: array[59, int8]
szDispName: array[128, int8]
szLocale: array[10, int8]
szStub: array[1040, int8]
szVersion: array[32, int8]
szCompID: array[128, int8]
dwIsInstalled: uint32
bRollback: int32struct PERUSERSECTIONA
{
byte[59] szGUID;
byte[128] szDispName;
byte[10] szLocale;
byte[1040] szStub;
byte[32] szVersion;
byte[128] szCompID;
uint dwIsInstalled;
int bRollback;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PERUSERSECTIONA サイズ: 1408 バイト(x64)
dim st, 352 ; 4byte整数×352(構造体サイズ 1408 / 4 切り上げ)
; szGUID : CHAR (+0, 59byte) varptr(st)+0 を基点に操作(59byte:入れ子/配列)
; szDispName : CHAR (+59, 128byte) varptr(st)+59 を基点に操作(128byte:入れ子/配列)
; szLocale : CHAR (+187, 10byte) varptr(st)+187 を基点に操作(10byte:入れ子/配列)
; szStub : CHAR (+197, 1040byte) varptr(st)+197 を基点に操作(1040byte:入れ子/配列)
; szVersion : CHAR (+1237, 32byte) varptr(st)+1237 を基点に操作(32byte:入れ子/配列)
; szCompID : CHAR (+1269, 128byte) varptr(st)+1269 を基点に操作(128byte:入れ子/配列)
; dwIsInstalled : DWORD (+1400, 4byte) st.350 = 値 / 値 = st.350 (lpoke/lpeek も可)
; bRollback : BOOL (+1404, 4byte) st.351 = 値 / 値 = st.351 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PERUSERSECTIONA
#field byte szGUID 59
#field byte szDispName 128
#field byte szLocale 10
#field byte szStub 1040
#field byte szVersion 32
#field byte szCompID 128
#field int dwIsInstalled
#field bool bRollback
#endstruct
stdim st, PERUSERSECTIONA ; NSTRUCT 変数を確保
st->dwIsInstalled = 100
mes "dwIsInstalled=" + st->dwIsInstalled