創(chuàng)建 C/C++ 數(shù)據(jù)結(jié)構(gòu)供 DllCall 使用.
DllStructCreate ( 結(jié)構(gòu) [, 指針] )
結(jié)構(gòu) | 字符串表示的數(shù)據(jù)結(jié)構(gòu) (見備注). |
指針 | [可選參數(shù)] 如果指定的數(shù)據(jù)結(jié)構(gòu)不能分配內(nèi)存, 則使用此指針提供. |
成功: | 返回供 DllStruct 調(diào)用的變量. |
失敗: | 返回 0. |
@Error: | 0 = 無錯(cuò)誤. |
1 = 傳遞給 DllStructCreate 的變量不是字符串. | |
2 = 傳遞的字符串中有一個(gè)未知的數(shù)據(jù)類型. | |
3 = 數(shù)據(jù)結(jié)構(gòu)不能分配內(nèi)存, 或指針 = 0. | |
4 = 傳遞的字串分配內(nèi)存錯(cuò)誤. |
類型 | 詳細(xì)信息 |
BYTE | 8 位(1字節(jié)) 無符號(hào)字符 |
BOOLEAN | 8 位(1字節(jié)) 無符號(hào)字符 |
CHAR | 8 位(1字節(jié)) ASCII 字符 |
WCHAR | 16 位(2字節(jié)) UNICODE 寬字符 |
short | 16 位(2字節(jié)) 帶符號(hào)整數(shù) |
USHORT | 16 位(2字節(jié)) 無符號(hào)整數(shù) |
WORD | 16 位(2字節(jié)) 無符號(hào)整數(shù) |
int | 32 位(4字節(jié)) 帶符號(hào)整數(shù) |
long | 32 位(4字節(jié)) 帶符號(hào)整數(shù) |
BOOL | 32 位(4字節(jié)) 帶符號(hào)整數(shù) |
UINT | 32 位(4字節(jié)) 無符號(hào)整數(shù) |
ULONG | 32 位(4字節(jié)) 無符號(hào)整數(shù) |
DWORD | 32 位(4字節(jié)) 無符號(hào)整數(shù) |
INT64 | 64 位(8字節(jié)) 帶符號(hào)整數(shù) |
UINT64 | 64 位(8字節(jié)) 無符號(hào)整數(shù) |
ptr | 32 或 64 位無符號(hào)整數(shù) (取決于使用的 x86 或 x64 AutoIt 版本) |
HWND | 32 位(4字節(jié)) 整數(shù) |
HANDLE | 32 位(4字節(jié)) 整數(shù) |
float | 32 位(4字節(jié)) 浮點(diǎn)數(shù) |
double | 64 位(8字節(jié)) 浮點(diǎn)數(shù) |
INT_PTR, LONG_PTR, LRESULT, LPARAM | 32 或 64 位帶符號(hào)整數(shù) (取決于使用的 x86 或 x64 AutoIt 版本) |
UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM | 32 或 64 位無符號(hào)整數(shù) (取決于使用的 x86 或 x64 AutoIt 版本) |
STRUCT | 以下數(shù)據(jù)類型將根據(jù) C 語言聲明的規(guī)則調(diào)整. 見下文. |
ENDSTRUCT | 結(jié)束收集數(shù)據(jù)類型. 可以發(fā)生填充. 見下文. |
ALIGN | n 數(shù)據(jù)類型必須對(duì)齊的字節(jié)界限. |
;=========================================================
; 創(chuàng)建數(shù)據(jù)結(jié)構(gòu)
; struct {
; int
var1;
; unsigned char
var2;
; unsigned int
var3;
; char
var4[128];
; }
;=========================================================
Local $str
= "int var1;byte var2;uint
var3;char var4[128]"
Local $a
= DllStructCreate($str)
If @error
Then
MsgBox(0, "", "DllStructCreate 發(fā)生錯(cuò)誤 " &
@error);
Exit
EndIf
;=========================================================
; 設(shè)置數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)
; struct.var1 = -1;
; struct.var2 = 255;
; struct.var3 = INT_MAX; -1
將自動(dòng)確定類型(無符號(hào) 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)
;=========================================================
; 顯示數(shù)據(jù)結(jié)構(gòu)的信息
;=========================================================
MsgBox(0, "DllStruct", "數(shù)據(jù)結(jié)構(gòu)大小: " & DllStructGetSize($a) & @CRLF & _
"數(shù)據(jù)結(jié)構(gòu)指針: " & DllStructGetPtr($a) & @CRLF & _
"數(shù)據(jù):" & @CRLF & _
DllStructGetData($a, 1) & @CRLF & _
DllStructGetData($a, 2) & @CRLF & _
DllStructGetData($a, 3) & @CRLF & _
DllStructGetData($a, 4))
;=========================================================
; 釋放為數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存
;=========================================================
$a = 0
provider with jb51.net (unicode) |