過去レスなどを参考にしてVB.netでpingをおこなうプログラムを書いているのですが、
Private Structure WSADATA
Dim wVersion As Integer
Dim wHighVersion As Integer
Dim szDescription(0 To MAX_WSADescription) As Byte
Dim szSystemStatus(0 To MAX_WSASYSStatus) As Byte
Dim wMaxSockets As Long
Dim wMaxUDPDG As Long
Dim dwVendorInfo As Long
End Structure
の
Dim szDescription(0 To MAX_WSADescription) As Byte
Dim szSystemStatus(0 To MAX_WSASYSStatus) As Byte
のところで「構造体メンバとして宣言された配列を初期サイズで宣言することはできません」とエラーがでてしまいます。
どなたかご指導お願いします。
VB初心者なのでわかりやすく解説していただけたら幸いです。
MarshalAs属性のSizeConstフィールドについて調べてみるとか。
初心者なものでもう少しわかりやすくしていただけるとありがたいです。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200208/02080041.txt
に書かれているソースをVB.netで使用できるよう変換すれば使えるか教えていただければbestなのですが...。
全く意味がわからない状態だと、使いこなすことは難しいかも。
サンプルをコピーして使うぐらいならばできるでしょうけれども。
> 初心者なものでもう少しわかりやすくしていただけるとありがたいです。
マーシャリング関係は、初心者を明言しているうちは厳しいかも知れません。
API側のメモリ配置と、.NET側の実装の両方を理解する必要があるので…。
> http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200208/02080041.txt
> に書かれているソースをVB.netで使用できるよう変換すれば使えるか教えていただければbestなのですが...。
PINGを発行したいだけならば、System.Management.DLLを参照設定しておいて、
Win32_PingStatusクラスを呼び出した方が楽ですよ。
Dim IPAddress As String = "127.0.0.1"
Dim searcher As New System.Management.ManagementObjectSearcher( _
"SELECT * FROM Win32_PingStatus" _
& " WHERE ADDRESS='" & IPAddress & "'" _
)
For Each mo As System.Management.ManagementObject In searcher.Get()
Dim StatusCode As Integer '元の型は UInt32
StatusCode = System.Convert.ToInt32(mo.Properties("StatusCode").Value)
Select Case StatusCode
Case 0
TextBox1.Text = "成功"
Case 11010
TextBox1.Text = "Request Timed Out"
Case Else
TextBox1.Text = "その他のエラー:" & CStr(StatusCode)
End Select
Next
StatusCodeの意味は、下記を参照。
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_pingstatus.asp
タイトルにそくして・・・
こんなのもありますよ。
http://www.bcap.co.jp/hanafusa/bbs/wforum.cgi?no=968&reno=967&oya=965&mode=msgview
これも読んで下さい。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vblr7/html/vastmstructure.asp
これなんか読みやすいですよ。
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet03/vb6tonet03_02.html
ついでにこれも・・・
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet03/vb6tonet03_03.html
ここまで必要ないでしょうが参考までに。。。
デバッグ時にローカルタブをあけ、strTestOyaを展開して下さい。
Public Class Form1
Inherits System.Windows.Forms.Form
Private Structure NameTestOya
Public FirstName As String
Public MiddleName() As NameTestKo
Public LastName As String
End Structure
Private Structure NameTestKo
Public KoName1 As String
Public KoName2 As String
End Structure
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Dim strTestOya() As ControlsClass.NameTestOya
'Dim strTestKo() As ControlsClass.NameTestKo
Dim strTestOya() As NameTestOya
Dim strTestKo() As NameTestKo
ReDim Preserve strTestOya(0)
strTestOya(0).FirstName = "A"
strTestOya(0).LastName = "Z"
Dim i As Integer
For i = 0 To 2
ReDim Preserve strTestKo(i)
strTestKo(i).KoName1 = CStr(i) & " : B-1"
strTestKo(i).KoName2 = CStr(i) & " : B-2"
ReDim Preserve strTestOya(0).MiddleName(i)
strTestOya(0).MiddleName(i) = strTestKo(i)
Next
End Sub
End Class
魔界の仮面弁士さん、う〜にんさん
ありがとうございます。
何とかがんばってみます。
ツイート | ![]() |