【发布时间】:2018-01-22 23:15:26
【问题描述】:
我的 vb6 程序在 32 位上运行。 现在我必须将其移至 64 位。
我在代码下面声明的库,系统似乎无法获取它。 声明:
Public Declare Function LogonUser Lib "advapi32.dll" _
Alias "LogonUserA" (ByVal lpszUsername As String, _
ByVal lpszDomain As String, ByVal lpszPassword As String, _
ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, _
phToken As Long) As Long
Public Declare Function ImpersonateLoggedOnUser Lib "advapi32.dll" (ByVal hToken As Long) As Long
Public Declare Function RevertToSelf Lib "advapi32.dll" () As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
运行代码:
Public Sub Logon(ByVal strAdminUser As String, ByVal _
strAdminPassword As String, ByVal strAdminDomain As String)
Dim lngTokenHandle As Long
Dim lngLogonType As Long
Dim lngLogonProvider As Long
Dim blnResult As Boolean
lngLogonType = 2
lngLogonProvider = 0
blnResult = RevertToSelf()
blnResult = LogonUser(strAdminUser, strAdminDomain, strAdminPassword, _
lngLogonType, lngLogonProvider, _
lngTokenHandle)
blnResult = ImpersonateLoggedOnUser(lngTokenHandle)
CloseHandle (lngTokenHandle)
End Sub
我收到了错误信息
Error 91:Object variable or With block variable not set
几乎有人说需要在Declare后加上“ptrsafe”,但vb6中没有ptrsafe。
如何在 64 位和 vb6 中声明没有“ptrsafe”的函数库?
【问题讨论】:
-
这是 VB6 还是 VBA? (你标记了两种语言,但你似乎在讨论 VB6。可能是人们给你一个 VBA 解决方案,因为他们认为你在谈论 VBA。)
-
来自wikipedia's VB page 的一些 cmets 可能是相关的 - “Visual Basic 开发以 6.0 结束,但在 2010 年 Microsoft 引入了 VBA 7 以提供扩展功能并添加 64 位支持。”并且“尽管供应商对 Visual Basic 6 的支持已经结束,并且该产品从未在最新版本的 Windows 上得到支持,但该环境的关键部分仍然可以在较新的平台上运行。可以让开发环境的一个子集在32 位和 64 位版本的 Windows Vista、Windows 7、Windows 8 和 Windows 10。"
-
您无法将 VB6 编译为 64 位。 VB6对
PtrSafe、LongPtr、LongLong、CLngLng一无所知。 -
显示您使用的完整代码,否则无济于事。
-
谁反对我的问题?能告诉我哪里错了吗?
标签: vba vb6 64-bit 32bit-64bit