带有指向文件内容的指针的DllStructCreate导致打印错误的结果

问题描述

我有一个读取BMP文件的代码,它有一个指向具有文件内容的结构的指针:

$fileContent

然后,它创建一个具有两个元素的BMP结构:一个具有54个字节的大小(BMP标头),第二个具有其余的元素(BMP大小-54),并且它使用指向Local $bmpStruct = DllStructCreate("struct;byte[54];byte[" & $bmpFileSize - 54 & "];endstruct",DllStructGetPtr($fileContent)) 的指针:

DllStructGetData($bmpStruct,2,1)

在这种情况下,当我打电话给DllStructGetData($bmpStruct,1)时,应该打印什么,BMP文件中的索引53或54还是索引0?
我假设$bmpFileSize - 54指的是 second 元素,其大小为0,因此我认为它将打印索引54,但我不确定。>

我试图用脚本检查它,但是使用它时,它一直在打印我Func CreateFile($i_Filename) Local $flrichemye = DllCall("kernel32.dll","ptr","CreateFile","str",$i_Filename,"uint",2147483648,3,128,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,1)) EndIf EndIf ,不知道为什么。

我的代码:

           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)              

     

图片内容:

{{1}}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...