none
VS 2010 GetUserName API 問題 RRS feed

  • 問題

  • Public Class Form1
      Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, ByVal nSize As Integer) As Integer
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim xstr As String = Space(255)
        Dim max As Integer = 255
        Dim rc As Integer
        rc = GetUserName(xstr, max)
        MessageBox.Show(Mid(xstr, 1, max))
      End Sub
    End Class
    

    我這樣子用 它都一直擲回 AccessViolationException 例未外狀況

    有什麼更正的方法嗎?

    • 已移動 Bill ChungMVP, Moderator 2011年1月21日 上午 11:00 應屬Visual Basic問題 (從:Visual Studio一般討論區(General))
    2011年1月21日 上午 05:58

解答

  • 試看看改成這樣

    (ByVal lpBuffer As String, ByRef nSize As Integer)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 Just Lin 2011年1月21日 下午 02:18
    2011年1月21日 上午 06:15
    版主
  • 您好

    請參考 升級建議:調整 Win32 API 的資料型別

    http://msdn.microsoft.com/zh-tw/library/5k8a3s7s(v=vs.90).aspx

    裡面有使用範例,並且可以正常運作

    Declare Function GetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
    Function GetUser()
        Dim Ret As Integer
        Dim UserName As String
        Dim Buffer As String
        Buffer = New String(CChar(" "), 25)
        Ret = GetUserName(Buffer, 25)
        UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1)
        MsgBox(UserName)
    End Function


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 Just Lin 2011年1月21日 下午 02:18
    2011年1月21日 上午 06:18
    版主
  • 如果您是要取得目前登入使用者的名稱, 可以使用Environment.UserName取得
    • 已標示為解答 Just Lin 2011年1月21日 下午 02:18
    2011年1月21日 下午 01:42

所有回覆

  • 試看看改成這樣

    (ByVal lpBuffer As String, ByRef nSize As Integer)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 Just Lin 2011年1月21日 下午 02:18
    2011年1月21日 上午 06:15
    版主
  • 您好

    請參考 升級建議:調整 Win32 API 的資料型別

    http://msdn.microsoft.com/zh-tw/library/5k8a3s7s(v=vs.90).aspx

    裡面有使用範例,並且可以正常運作

    Declare Function GetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
    Function GetUser()
        Dim Ret As Integer
        Dim UserName As String
        Dim Buffer As String
        Buffer = New String(CChar(" "), 25)
        Ret = GetUserName(Buffer, 25)
        UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1)
        MsgBox(UserName)
    End Function


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 Just Lin 2011年1月21日 下午 02:18
    2011年1月21日 上午 06:18
    版主
  • 如果您是要取得目前登入使用者的名稱, 可以使用Environment.UserName取得
    • 已標示為解答 Just Lin 2011年1月21日 下午 02:18
    2011年1月21日 下午 01:42