• ベストアンサー

APIについて

Private Declare Function GetComputerName Lib "kernel32.dll" Alias _ "GetComputerNameA" (ByVal NameBuff As String, ByVal Size As Long) As Long Public Sub New() mstrMyCompName = Me.QryComputerName() mstrMyDummyData = mstrMyCompName & mcstrDumyKey End Sub Public Function QryComputerName() As String Dim strTmp As String Dim lngPos As Long If 0& < GetComputerName(strTmp, 256) Then lngPos = InStr(strTmp, vbNullChar) QryComputerName = Left$(strTmp, lngPos - 1) Else QryComputerName = "UnKnown" End If End Function 上記の記述を含むクラスを生成した際に、GetComputerName(strTmp, 256)のところで下記のエラーが発生しますが、原因が分かりません。 'System.NullReferenceException' のハンドルされていない例外が AtnSys.exe で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 何がいけないのでしょうか? OS:Win2000 言語:VB.Net ソリューション名:AtnSys

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

さらに#1さんの発言+で APIに文字型渡すならば、領域をとっておかないといけません。 Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer Declare Function GetComputerName Lib "kernel32.dll" Alias "GetComputerNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer Const MAX_BUFF_LEN As Integer = &HFF Function QryUserName() As String   Dim Buffer As New String(CChar(" "), MAX_BUFF_LEN)   Dim intLen As Integer = Buffer.Length   GetUserName(Buffer, intLen)   QryUserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1) End Function Function QryComputerName() As String   Dim Buffer As New String(CChar(" "), MAX_BUFF_LEN)   Dim intLen As Integer = Buffer.Length   GetComputerName(Buffer, intLen)   QryComputerName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1) End Function

Eagle1972
質問者

お礼

上記のを参考に自分のを修正したところ正常に動作しました。 とても勉強になりました、ありがとうございます。

その他の回答 (2)

回答No.2

API使わないでいいのであれば System.Environment を利用 MsgBox( _      "ユーザ:" & System.Environment.UserName().ToString & vbCrLf _     & "端末:" & System.Environment.MachineName() & vbCrLf _     & "ドメイン:" & System.Environment.UserDomainName() & vbCrLf _   )

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

VBのlongはVB.netではinteger

Eagle1972
質問者

補足

すいません、VB6から貼り付けてそのままでした。 しかしlongをintegerにしても同様のエラーが出ます。 データ型の問題ではなさそうですが。

関連するQ&A

専門家に質問してみよう