0

以前の MS 基本バージョンで使用していたように、単一の vbnet プロジェクトの異なるファイルのサブルーチン/関数を介して構造体を引数として渡すことができません。
状況の短い例を次に示します。

Module1.vb

Imports System.IO

Structure mymultitry
     Dim index As Integer
    <VBFixedString(6)> Dim name As String
    Dim weight As Double
End Structure

Module Module1
Public mysetupfile = "mysetup.dat"

Public Sub rwfile(ByVal rw As Integer, ByVal myrecord As Integer, ByVal mmt As mymultitry)

'EDIT: Thanks to SteveDog - proper line should be:
'Public Sub rwfile(ByVal rw As Integer, ByVal myrecord As Integer, ByRef mmt As mymultitry)

    Dim fnum As Integer
    fnum = FreeFile()
    FileOpen(fnum, mysetupfile, OpenMode.Random, OpenAccess.ReadWrite, OpenShare.Shared, Len(mmt))
    If rw Then
        FilePut(fnum, mmt, myrecord)
    Else
        FileGet(fnum, mmt, myrecord)
    End If
    FileClose(fnum)
End Sub

End Module

Form1.vb

Public Class Form1
Dim mmt As mymultitry
Dim mmt1 As mymultitry

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    With mmt
        .index = 4
        .name = "Helga"
        .weight = 128.1445
    End With
    rwfile(1, 1, mmt)  'write

    rwfile(0, 1, mmt1) 'read

    'all zero here !?!
    Debug.Print(mmt1.index)
    Debug.Print(mmt1.name)
    Debug.Print(mmt1.weight)

End Sub
End Class

ファイル「mysetup.dat」に到達可能で、HxD で確認できるデータが正しく保存されています。しかし、読み取り部分は期待どおりに機能しないようです。

上の例に基づいて、あまりにも多くのパブリック要素を使用せずに、信頼できる構造を引数として渡す方法について助けてください。

4

1 に答える 1

1

クラスで新しい .NET IO メソッドを使用するようにコードを書き直すことを強くお勧めしますが、それはさておき、既存のコードの問題は、引数を からにSystem.IO.File変更する必要があることだと思います。mmtByValByRef

于 2012-06-21T10:29:01.293 に答える