如何在64位环境中声明没有ptrsafe的函数?

鄭有維*_*鄭有維 2 vb6 64-bit vba 32bit-64bit

我的vb6程序运行在32位.现在我必须将它移动到64位.

我在代码下面声明的lib,系统似乎无法得到它.宣布:

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
Run Code Online (Sandbox Code Playgroud)

运行代码:

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
Run Code Online (Sandbox Code Playgroud)

我收到了错误消息

Error 91:Object variable or With block variable not set

几乎所有人都说需要在Declare之后添加"ptrsafe",但vb6中没有ptrsafe.

如何在64位和vb6中声明没有"ptrsafe"的函数库?

Ale*_* K. 7

几乎所有人都说需要在Declare之后添加"ptrsafe",但vb6中没有ptrsafe.如何在64位和vb6中声明没有"ptrsafe"的函数库?

当VBA在64位应用程序(例如64位Office套件中的一个程序)中运行时,它需要能够处理64位Windows.

VB6永远运行并始终作为32位进程运行,它不需要64位识别,因为64位Windows很乐意模拟32位代码,无需额外的步骤.

因为这不需要指针安全类型,所以Long在VB6中使用32位约定().