構造体の中に構造体宣言するには?

解決


小牟  2005-08-27 20:51:03  No: 91827

過去レスなどを参考にして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初心者なのでわかりやすく解説していただけたら幸いです。


K.J.K.  2005-08-27 21:10:48  No: 91828

MarshalAs属性のSizeConstフィールドについて調べてみるとか。


小牟  2005-08-29 20:47:42  No: 91829

初心者なものでもう少しわかりやすくしていただけるとありがたいです。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200208/02080041.txt
に書かれているソースをVB.netで使用できるよう変換すれば使えるか教えていただければbestなのですが...。


魔界の仮面弁士  2005-08-29 21:13:02  No: 91830

全く意味がわからない状態だと、使いこなすことは難しいかも。
サンプルをコピーして使うぐらいならばできるでしょうけれども。

> 初心者なものでもう少しわかりやすくしていただけるとありがたいです。
マーシャリング関係は、初心者を明言しているうちは厳しいかも知れません。
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


う〜にん  2005-08-29 22:25:15  No: 91831

タイトルにそくして・・・

こんなのもありますよ。
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


小牟  2005-08-30 22:50:18  No: 91832

魔界の仮面弁士さん、う〜にんさん
ありがとうございます。
何とかがんばってみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加