Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NSIS转储日志能否与64位版本一起使用?_Nsis - Fatal编程技术网

NSIS转储日志能否与64位版本一起使用?

NSIS转储日志能否与64位版本一起使用?,nsis,Nsis,我正在使用NSIS的64位构建,除了DumpLog函数之外,其他所有功能都可以将安装日志写入文件 (NSIS 64在这里:) DumpLog使用Windows消息来获取文本值,看起来调用仅为32位 下面是该函数的一个示例: 它定义了不适用于64位的: !define LVM_GETITEMCOUNT 0x1004 !define LVM_GETITEMTEXT 0x1073 我找到了LVM_GETITEMCOUNT的64位版本,即0x00001004 有没有人能用64位来实现这个函数 bit

我正在使用NSIS的64位构建,除了DumpLog函数之外,其他所有功能都可以将安装日志写入文件

(NSIS 64在这里:)

DumpLog使用Windows消息来获取文本值,看起来调用仅为32位

下面是该函数的一个示例:

它定义了不适用于64位的:

!define LVM_GETITEMCOUNT 0x1004
!define LVM_GETITEMTEXT 0x1073
我找到了LVM_GETITEMCOUNT的64位版本,即0x00001004


有没有人能用64位来实现这个函数

bitbucket端口不支持使用System::Call调用任意函数,该DumpLog函数也不兼容64位,因为它在需要
p
时使用
i
类型,并且存在一些额外的填充问题

以下是64位兼容版本:

!define LVM_GETITEMCOUNT 0x1004
!define LVM_GETITEMTEXT 0x1073
Function DumpLog
  Exch $5
  Push $0
  Push $1
  Push $2
  Push $3
  Push $4
  Push $6
  Push $7
  FindWindow $0 "#32770" "" $HWNDPARENT
  GetDlgItem $0 $0 1016
  StrCmp $0 0 error
  FileOpen $5 $5 "w"
  FileWriteWord $5 0xfeff ; Write the BOM
  StrCmp $5 0 error
    SendMessage $0 ${LVM_GETITEMCOUNT} 0 0 $6
    System::Call "*(&t${NSIS_MAX_STRLEN})p.r3"
    System::Call "*(i0,i0,i0,i0,&i${NSIS_PTR_SIZE} 0,p$3,i${NSIS_MAX_STRLEN},i0,p0)p.r1" ; NSIS_PTR_SIZE is used to align the pszText member on x64
    StrCpy $2 0
    loop: StrCmp $2 $6 done
      System::Call "User32::SendMessage(p$0,i${LVM_GETITEMTEXT},p$2,pr1)p"
      System::Call "*$3(&t${NSIS_MAX_STRLEN} .r4)"
      FileWriteUTF16LE $5 "$4$\r$\n"
      IntOp $2 $2 + 1
      Goto loop
    done:
      FileClose $5
      System::Free $1
      System::Free $3
      Goto exit
  error:
    MessageBox MB_OK|MB_ICONSTOP "Error at DumpLog"
  exit:
    Pop $7
    Pop $6
    Pop $4
    Pop $3
    Pop $2
    Pop $1
    Pop $0
    Exch $5
FunctionEnd
您需要一个能够调用任意函数的System.dll版本,恐怕唯一的方法是将官方SVN主干编译为64位


(由于StackOverflow不支持文件上传,您可以将此图像重命名为.zip并在7Zip中打开)

0x00001004与0x1004相同。。。