Проблемы с обновлением Windows 10 до 64-разрядной версии с запросом атрибута PtrSafe? - PullRequest
0 голосов
/ 05 августа 2020

У меня возникли проблемы со следующим заявлением объявления, как показано ниже:

Private Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long

Ошибка запрашивает атрибут PtrSafe.

1 Ответ

2 голосов
/ 05 августа 2020

Попробуйте это объявление, пожалуйста:

Private Declare PtrSafe Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" _
          (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long

И используйте следующую функцию для получения зарегистрированного имени пользователя:

Function GetUserName() As String
 Const lpnLength As Long = 255
 Dim status As Long, lpName, lpUserName As String

 'Assign the buffer size constant to lpUserName.
 lpUserName = Space$(lpnLength + 1)

 status = WNetGetUser(lpName, lpUserName, lpnLength)

 'See whether error occurred.
 If status = 0 Then
    lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
 End If

 GetUserName = lpUserName
End Function

Его можно вызвать:

Sub TestUserName()
    Debug.Print GetUserName
End Sub

Все выше, только если вы настаиваете на использовании API ...

Но у VBA есть простой способ его получить:

Debug.Print Application.UserName

Если вам это не нравится, используя VBScript ( в VBA) может помочь:

Sub testUserNameVBSCript()
 Dim userName As String
   userName = CreateObject("WScript.Network").userName
   Debug.Print userName
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...