2012-06-21 112 views
0

我不能像在早期的MS基本版本中那樣使用單個vbnet項目的不同文件中的subs/functions來傳遞結構作爲參數。
這裏的情況簡單的例子:通過文件/函數傳遞結構作爲參數

的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。 但閱讀部分似乎沒有按預期工作。

請在可靠的傳遞結構作爲參數的幫助,沒有太多的公共元素基於上面的例子。

回答

1

我強烈建議你重寫代碼以使用在System.IO.File類新的.NET IO的方法,但是,拋開那個,我想與您現有的代碼,你的問題是,你需要你的mmt參數改變從ByValByRef

+0

嗨史蒂夫,不明白什麼是.Net IO的原因我很新的VB.Net。但通過參考傳遞我的結構,我的代碼按預期工作,謝謝。 –