Pointers 指针指向文件内容的DllStructCreate会一直打印错误的结果
我有一个读取BMP文件的代码,它有一个指向具有文件内容的结构的指针:Pointers 指针指向文件内容的DllStructCreate会一直打印错误的结果,pointers,struct,autoit,Pointers,Struct,Autoit,我有一个读取BMP文件的代码,它有一个指向具有文件内容的结构的指针: Local $fileContent = DllStructCreate("struct;byte[" & $bmpFileSize & "];endstruct") 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ------------------------------
Local $fileContent = DllStructCreate("struct;byte[" & $bmpFileSize & "];endstruct")
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------------------------------------------------
00000000 | 42 4D 64 1B 04 00 00 00 00 00 36 00 00 00 28 00
00000010 | 00 00 2B 01 00 00 2B 01 00 00 01 00 18 00 00 00
00000020 | 00 00 2E 1B 04 00 C3 0E 00 00 C3 0E 00 00 00 00
00000030 | 00 00 00 00 00 00 FF FF FE FE FE FE FF FF FF FF
^
Index 53 (decimal)
然后,它创建一个包含两个元素的BMP结构:一个元素的大小为54字节(BMP标头),另一个元素的大小为其余元素(BMP大小为-54),并使用指向$fileContent
的指针:
Local $bmpStruct = DllStructCreate("struct;byte[54];byte[" & $bmpFileSize - 54 & "];endstruct", DllStructGetPtr($fileContent))
在这种情况下,当我调用:DllStructGetData($bmpStruct,2,1)
时,应该打印什么,BMP文件中的53或54的索引或索引0?我假设
dllsstructGetData($bmpStruct,2,1)
指的是第二个元素,其大小为$bmpFileSize-54
,因此我认为它将打印54的索引,但我不确定
我试图用脚本检查它,但当我使用它时,它一直在打印我0
,不知道为什么
我的代码:
Func CreateFile($i_Filename)
Local $flrichemye = DllCall("kernel32.dll", "ptr", "CreateFile", "str", $i_Filename, "uint", 2147483648, "uint", 0, "ptr", 0, "uint", 3, "uint", 128, "ptr", 0)
Return $flrichemye[0]
EndFunc
Local $bmpName = "C:\tmp\mypic.bmp"
Local $fileHandle = CreateFile($bmpName)
If $fileHandle <> -1 Then
Local $bmpFileSize = FileGetSize($bmpName)
Local $fileContent = DllStructCreate("struct;byte[" & $bmpFileSize & "];endstruct")
Local $readResult = FileRead($fileHandle, $fileContent)
If $readResult <> -1 Then
Local $bmpStruct = DllStructCreate("struct;byte[54];byte[" & $bmpFileSize - 54 & "];endstruct", DllStructGetPtr($fileContent))
MsgBox(0, "AutoIt", "Result: " & DllStructGetData($bmpStruct, 2, 1))
EndIf
EndIf
你有没有检查过,文件是否已经创建?(复制粘贴代码时,不会创建任何文件)