Ich versuche eine Struktur von einer Klasse zu initialisieren, die ich in meinem Code habe. Dies ist eine 3rd-Party-Klasse mit wenig oder gar keiner Dokumentation für .NET, also stecke ich in einer Initialisierung einiger Char-Variablen fest, die mit einer festen Länge innerhalb einer Struktur definiert wurden.Wie kann ich Char-Variablen fester Länge von einer Struktur korrekt initialisieren?
Dies ist die Struktur aus dieser 3. Teilklasse.
<StructLayout(LayoutKind.Sequential,Pack:=4)> _
Public Structure ODBSYS
Public addinfo As Short
Public max_axis As Short
<MarshalAs(UnmanagedType.ByValArray,SizeConst:=2)> _
Public cnc_type As Char()
<MarshalAs(UnmanagedType.ByValArray,SizeConst:=2)> _
Public mt_type As Char()
<MarshalAs(UnmanagedType.ByValArray,SizeConst:=4)> _
Public series As Char()
<MarshalAs(UnmanagedType.ByValArray,SizeConst:=4)> _
Public version As Char()
<MarshalAs(UnmanagedType.ByValArray,SizeConst:=2)> _
Public axes As Char()
End Structure
Und dies ist die Funktion arbeite ich an:
Private Function GetControlInfo()
Dim CNCSys As Focas1.ODBSYS
CNCSys.addinfo = 0
CNCSys.max_axis = 0
CNCSys.cnc_type = ""
CNCSys.mt_type = ""
CNCSys.series = ""
CNCSys.version = ""
CNCSys.axes = ""
Try
intHandleNo = Focas1.cnc_sysinfo(LibHndl, CNCSys)
MessageBox.Show("AddInfo: " & CNCSys.addinfo.ToString & vbCrLf & _
"MaxAxis: " & CNCSys.max_axis.ToString & vbCrLf & _
"CNCType: " & CNCSys.cnc_type.ToString & vbCrLf & _
"MTType: " & CNCSys.mt_type.ToString & vbCrLf & _
"Series: " & CNCSys.series.ToString & vbCrLf & _
"Version: " & CNCSys.version.ToString & vbCrLf & _
"Axes: " & CNCSys.axes.ToString)
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Return Nothing
End Function
Wenn ich hinzufügen dont diese Variable Initialisierung Code direkt nach der Erstellung von KSYS:
CNCSys.addinfo = 0
CNCSys.max_axis = 0
CNCSys.cnc_type = ""
CNCSys.mt_type = ""
CNCSys.series = ""
CNCSys.version = ""
CNCSys.axes = ""
I Holen Sie sich die nervige Nachricht im Fehlerlistenbereich (Weil ich die Variablen nicht von der Struktur initialisiere):
"Warnvariable 'CNCSys' wird als Referenz übergeben, bevor ihr ein Wert zugewiesen wurde. Eine NULL-Referenzausnahme könnte zur Laufzeit auftreten. Stellen Sie sicher, dass die Struktur oder alle Referenzelemente vor der Verwendung initialisiert werden. "
Ok, Hinzufügen dieses Codes löst die Warnung von nicht initialisierten Variablen, ich kann die Lösung erstellen und ausführen, es ... aber wenn die Funktion GetControlInfo
genannt wird, erhalte ich diese excception:
„Typ nicht serialisiert werden, da die Länge eines eingebetteten Array-Instanz im Layout die angegebene Länge nicht übereinstimmt“
ich glaube Es ist, weil diejenigen, Variablen sind Char Vars in der Struktur, und sie haben feste Längen ... und ich bin nicht irgendwie initiizin g sie mit den gleichen Längen, die sie in der Struct-Definition haben ...
Was mache ich hier falsch? Wie kann ich sie initialisieren, damit der Compiler mir keine Nachrichten über nicht initialisierte Variablen liefert, aber auch keine Probleme mit dem Marshalling?
Danke!