我有使用WinHttp
的Visual Basic for Applications代码,并且可以在32位Windows XP上运行32位Office 2010。在64位Windows 8上,相同的代码无法在64位Office 2013上正常运行,即使它编译得很好。
问题是{8}在Windows 8上返回错误87“参数不正确”。
我已仔细检查并三次检查所有指针在适当的代码中声明为LongPtr。我做错了什么?
以下是在32位Excel / Windows上运行良好的代码,但无法在64位Excel / Windows上运行:
WinHttpCrackUrl()
答案 0 :(得分:4)
struct
在C ++代码中对齐,但VBA结构已打包。在32位中,对于你的结构,它并不重要,因为所有成员都有对齐4.但在64位中,指针需要8字节对齐,结构有一些额外的填充。把它放进去:
Private Type URL_COMPONENTS
dwStructSize As Long
padding1 As Long
lpszScheme As LongPtr
dwSchemeLength As Long
nScheme As Long
lpszHostName As LongPtr
dwHostNameLength As Long
nPort As Long
lpszUserName As LongPtr
dwUserNameLength As Long
padding2 As Long
lpszPassword As LongPtr
dwPasswordLength As Long
padding3 As Long
lpszUrlPath As LongPtr
dwUrlPathLength As Long
padding4 As Long
lpszExtraInfo As LongPtr
dwExtraInfoLength As Long
padding5 As Long
End Type
我想你会想要一些条件编译来切换更好的32位和64位版本,但我必须承认不知道如何用VBA做到这一点。