欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基 礎(chǔ) 函 數(shù) 參 考


DllStructCreate

創(chuàng)建 C/C++ 數(shù)據(jù)結(jié)構(gòu)供 DllCall 使用.

DllStructCreate ( 結(jié)構(gòu) [, 指針] )

參 數(shù)

結(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é)界限.

備 注

每個(gè)數(shù)據(jù)類型必須由分號(hào) ';' 分隔.

創(chuàng)建數(shù)組,在數(shù)據(jù)類型后面添加 '[大小]' 如: DllStructCreate("int;char[128]")

元素名稱可以添加 C 結(jié)構(gòu)的申明. 如: DllStructCreate("int n;char buffer[128]").
數(shù)據(jù)名稱可以用其它 DllStruct... 函數(shù)中的元素代替. 數(shù)據(jù)名稱必須為英文字母或下劃線開頭.

如果收集的數(shù)據(jù)類型被定義為 C 聲明的 "struct{}" 結(jié)構(gòu), 則必須使用 "STRUCT; ...; ENDSTRUCT;".
需要做的內(nèi)部調(diào)整必須尊重創(chuàng)建的整個(gè)結(jié)構(gòu). 所有數(shù)據(jù)類型結(jié)構(gòu)調(diào)整無需作為隱式定義的結(jié)構(gòu)完成.

DllStructCreate("int;STRUCT;ptr;int;ENDSTRUCT;int") ; 結(jié)構(gòu)在 Windows X64 為 32 字節(jié); 在 Windows X32 為 16 字節(jié).
DllStructCreate("int;ptr;int;int") ; 結(jié)構(gòu)在 Windows X64 為 24 字節(jié); 在 Windows X32 為 16 字節(jié).

結(jié)構(gòu)調(diào)整使用不同的對(duì)齊前綴與關(guān)鍵字. 默認(rèn) n 為 8. 有效值為 1, 2, 4, 8, 與 16.
結(jié)構(gòu)元素對(duì)齊將根據(jù)邊界決定, 要么是一個(gè) n 的倍數(shù), 要么是結(jié)構(gòu)元素大小的整倍數(shù),取較小值.
這相當(dāng)于 Microsoft Visual C++ 編譯器的 #pragma pack 選項(xiàng).

DllStructCreate("short;int") ; 結(jié)構(gòu)為 8 字節(jié), "int" 偏移量 4
DllStructCreate("align 2;short;int") ; 結(jié)構(gòu)為 6 字節(jié), "int" 偏移量 2

DllStructCreate("byte;double") ; 結(jié)構(gòu)為 16 字節(jié), "double" 偏移量 8
DllStructCreate("align 4;byte;double") ; 結(jié)構(gòu)為 12 字節(jié), "double" 偏移量 4

如果對(duì)齊 "align" 需要改變, 可以使用改變之前的第一個(gè)元素.
"align" 或 "align 8" 為默認(rèn)對(duì)齊方式.

要釋放分配的內(nèi)存,只需將返回的變量設(shè)置為 0.

以下規(guī)則適用于總對(duì)齊:

數(shù)組的對(duì)齊與數(shù)組中的一個(gè)元素對(duì)齊是一樣的.

結(jié)構(gòu)的開始對(duì)齊是最大限度的對(duì)齊任何一個(gè)元素.
如前面表中定義的, 結(jié)構(gòu)中的每個(gè)成員都被放置在其適當(dāng)?shù)膶?duì)齊位置, 需要隱式內(nèi)部填充, 取決于前一個(gè)元素.

結(jié)構(gòu)的大小是其對(duì)齊的整數(shù)倍, 這就需要填充后的最后一個(gè)元素.

相 關(guān) 函 數(shù)

DllCall, DllStructGetData, DllStructSetData, DllStructGetPtr, DllStructGetSize, IsDllStruct

函 數(shù) 示 例


;=========================================================
;   創(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)