DllCallで使用するためのC/C++スタイルの構造体を作成します。
DllStructCreate ( "Struct" [,Pointer] )
パラメータ
| "Struct" | 作成する構造体を表す文字列(注意を参照)。 |
| Pointer | [オプション]使用した場合、構造体にメモリが割り当てられるかわりにポインタが使用されます。 |
返し値
| 成功 | DllStruct系の関数で使用できる変数。 |
| 失敗 | 0 |
| @Error: | 0 = エラーなし。 |
| 1 = DllStructCreateに渡された変数が文字列でない。 | |
| 2 = 渡された文字列が表すデータ型が不正。 | |
| 3 = 構造体へのメモリ割り当てに失敗、もしくはPointer = 0。 | |
| 4 = 渡された文字列へのメモリ割り当てエラー。 |
| 型 | 詳細 | |
| BYTE | 8ビット(1バイト)符号なし文字 | |
| BOOLEAN | 8ビット(1バイト)符号なし文字 | |
| CHAR | 8ビット(1バイト)ASCII文字 | |
| WCHAR | 16ビット(2バイト)UNICODEワイド文字 | |
| short | 16ビット(2バイト)符号付き整数 | |
| USHORT | 16ビット(2バイト)符号なし整数 | |
| WORD | 16ビット(2バイト)符号なし整数 | |
| int | 32ビット(4バイト)符号付き整数 | |
| long | 32ビット(4バイト)符号付き整数 | |
| BOOL | 32ビット(4バイト)符号付き整数 | |
| UINT | 32ビット(4バイト)符号なし整数 | |
| ULONG | 32ビット(4バイト)符号なし整数 | |
| DWORD | 32ビット(4バイト)符号なし整数 | |
| INT64 | 64ビット(8バイト)符号付き整数 | |
| UINT64 | 64ビット(8バイト)符号なし整数 | |
| ptr | 32ビットまたは64ビット符号なし整数 (x86版、x64版どちらのAutoItが使われているかに依存します) | 32ビット(4バイト) 整数 |
| HWND | 32ビット(4バイト) 整数 | |
| HANDLE | 32ビット(4バイト) 整数 | |
| float | 32ビット(4バイト)浮動小数点 | |
| double | 64ビット(8バイト)浮動小数点 | |
| INT_PTR, LONG_PTR, LRESULT, LPARAM | 32ビットまたは64ビット符号付き整数 (x86版、x64版どちらのAutoItが使われているかに依存します) | |
| UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM | 32ビットまたは64ビット符号なし整数 (x86版、x64版どちらのAutoItが使われているかに依存します) |
注意
各データ型はセミコロン ';' で区切られていなければなりません。
関連
DllCall, DllStructGetData, DllStructSetData, DllStructGetPtr, DllStructGetSize, IsDllStruct
例
;=========================================================
; 構造体作成
; struct {
; int var1;
; unsigned char var2;
; unsigned int var3;
; char var4[128];
; }
;=========================================================
$str = "int var1;ubyte var2;uint var3;char var4[128]"
$a = DllStructCreate($str)
if @error Then
MsgBox(0,"","Error in DllStructCreate " & @error);
exit
endif
;=========================================================
; 構造体にデータを設定
; struct.var1 = -1;
; struct.var2 = 255;
; struct.var3 = INT_MAX; -1 は(unsigned int に)型キャストされる
; strcpy(struct.var4,"Hello");
; struct.var4[0] = 'h';
;=========================================================
DllStructSetData($a,"var1",-1)
DllStructSetData($a,"var2",255)
DllStructSetData($a,"var3",-1)
DllStructSetData($a,"var4","Hello")
DllStructSetData($a,"var4",Asc("h"),1)
;=========================================================
; 構造体の情報を表示
;=========================================================
MsgBox(0,"DllStruct","Struct Size: " & DllStructGetSize($a) & @CRLF & _
"Struct pointer: " & DllStructGetPtr($a) & @CRLF & _
"Data:" & @CRLF & _
DllStructGetData($a,1) & @CRLF & _
DllStructGetData($a,2) & @CRLF & _
DllStructGetData($a,3) & @CRLF & _
DllStructGetData($a,4))
;=========================================================
; 必要な場合、構造体に割り当てられたメモリを解放
;=========================================================
$a=0