如何使WinHttpCrackUrl在64位工作

时间:2013-06-17 20:55:46

标签: windows vba excel-vba 64-bit winhttp

我有使用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()

1 个答案:

答案 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做到这一点。