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

基 礎 函 數(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 = 無錯誤.
1 = 傳遞給 DllStructCreate 的變量不是字符串.
2 = 傳遞的字符串中有一個未知的數(shù)據(jù)類型.
3 = 數(shù)據(jù)結(jié)構(gòu)不能分配內(nèi)存, 或指針 = 0.
4 = 傳遞的字串分配內(nèi)存錯誤.


類型 詳細信息
BYTE 8 位(1字節(jié)) 無符號字符
BOOLEAN 8 位(1字節(jié)) 無符號字符
CHAR 8 位(1字節(jié)) ASCII 字符
WCHAR 16 位(2字節(jié)) UNICODE 寬字符
short 16 位(2字節(jié)) 帶符號整數(shù)
USHORT 16 位(2字節(jié)) 無符號整數(shù)
WORD 16 位(2字節(jié)) 無符號整數(shù)
int 32 位(4字節(jié)) 帶符號整數(shù)
long 32 位(4字節(jié)) 帶符號整數(shù)
BOOL 32 位(4字節(jié)) 帶符號整數(shù)
UINT 32 位(4字節(jié)) 無符號整數(shù)
ULONG 32 位(4字節(jié)) 無符號整數(shù)
DWORD 32 位(4字節(jié)) 無符號整數(shù)
INT64 64 位(8字節(jié)) 帶符號整數(shù)
UINT64 64 位(8字節(jié)) 無符號整數(shù)
ptr 32 或 64 位無符號整數(shù) (取決于使用的 x86 或 x64 AutoIt 版本)
HWND 32 位(4字節(jié)) 整數(shù)
HANDLE 32 位(4字節(jié)) 整數(shù)
float 32 位(4字節(jié)) 浮點數(shù)
double 64 位(8字節(jié)) 浮點數(shù)
INT_PTR, LONG_PTR, LRESULT, LPARAM 32 或 64 位帶符號整數(shù) (取決于使用的 x86 或 x64 AutoIt 版本)
UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM 32 或 64 位無符號整數(shù) (取決于使用的 x86 或 x64 AutoIt 版本)
STRUCT 以下數(shù)據(jù)類型將根據(jù) C 語言聲明的規(guī)則調(diào)整. 見下文.
ENDSTRUCT 結(jié)束收集數(shù)據(jù)類型. 可以發(fā)生填充. 見下文.
ALIGN n 數(shù)據(jù)類型必須對齊的字節(jié)界限.

備 注

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

創(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)建的整個結(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)整使用不同的對齊前綴與關(guān)鍵字. 默認 n 為 8. 有效值為 1, 2, 4, 8, 與 16.
結(jié)構(gòu)元素對齊將根據(jù)邊界決定, 要么是一個 n 的倍數(shù), 要么是結(jié)構(gòu)元素大小的整倍數(shù),取較小值.
這相當于 Microsoft Visual C++ 編譯器的 #pragma pack 選項.

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

如果對齊 "align" 需要改變, 可以使用改變之前的第一個元素.
"align" 或 "align 8" 為默認對齊方式.

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

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

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

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

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

相 關(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ā)生錯誤 " & @error);
    Exit
EndIf

;=========================================================
;   設置數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)
;   struct.var1 = -1;
;   struct.var2 = 255;
;   struct.var3 = INT_MAX; -1 將自動確定類型(無符號 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)