我有使用WinHttp Visual Basic for Applications代码,可以在32位Windows XP上运行的32位Office 2010完美地工作。 即使编译良好,也无法在64位Windows 8上的64位Office 2013上正确运行相同的代码。
问题是WinHttpCrackUrl()在Windows 8上返回错误87“参数不正确”。
我已经仔细检查和三重检查,所有的指针在适当的代码中声明为LongPtr。 我究竟做错了什么?
以下是在32位Excel / Windows上正常运行的代码,但无法在64位Excel / Windows上运行:
如何在32位操作系统上运行64位应用程序
免费的Windows 64位C ++ 11编译器
任何可用于包装32位/ 64位可执行文件的工具?
当32位Office存在时,手动安装64位MS Access ODBC驱动程序
在存储库查看器的服务器上独立的git二进制文件
Private Type URL_COMPONENTS dwStructSize 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 lpszPassword As LongPtr dwPasswordLength As Long lpszUrlPath As LongPtr dwUrlPathLength As Long lpszExtraInfo As LongPtr dwExtraInfoLength As Long End Type Private Declare PtrSafe Function WinHttpCrackUrl Lib "WinHTTP" ( _ ByVal pwszUrl As LongPtr,_ ByVal dwUrlLength As Long,_ ByVal dwFlags As Long,_ ByRef lpUrlComponents As URL_COMPONENTS) As Long Sub test() Dim result as Long Dim URLComp As URL_COMPONENTS Dim mURL as String mURL = "http://www.stackoverflow.com" & vbNullChar With URLComp .dwStructSize = Len(URLComp) .dwHostNameLength = -1 .dwSchemeLength = -1 .dwUrlPathLength = -1 End With result = WinHttpCrackUrl(StrPtr(mURL),URLComp) ' Prints 1 on 32-bit Excel/Windows (indicating success) ' Prints 0 on 64-bit Excel/Windows (indicating failure) Debug.Print result ' Prints 87 on 64-bit Excel/Windows ("The parameter is incorrect.") Debug.Print err.LastDllError End Sub
在fork之后重新创build死线程
如何运行Windows 8的基本版本安装的Windows Phone 8模拟器?
Matlab 2011a使用64位Linux上的所有内核?
在64位操作系统上将Anycpu应用程序作为32位运行
为什么这个过程在4GB时被杀了?
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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。