Я пытаюсь инициализировать структуру из класса, который у меня есть в моем коде. Это сторонний класс с небольшим количеством документации для .NET, поэтому я застрял в инициализации некоторых переменных Char, которые были определены с фиксированной длиной внутри структуры.Как правильно инициализировать переменные Char с фиксированной длиной из структуры?
Это - структура этого 3-го класса.
<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
И это функция я работаю на:
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
Если Я не добавить эту переменную код инициализации сразу после создания ГГС:
CNCSys.addinfo = 0
CNCSys.max_axis = 0
CNCSys.cnc_type = ""
CNCSys.mt_type = ""
CNCSys.series = ""
CNCSys.version = ""
CNCSys.axes = ""
I получить раздражающее сообщение в области списка ошибок (потому что я не инициализирую переменные из структуры):
«Предупреждающая переменная« CNCSys »передается по ссылке, прежде чем ей будет присвоено значение. Исключительное исключение ссылки может возникнуть во время выполнения. Убедитесь, что структура или все ссылочные элементы инициализированы перед использованием «
Хорошо, добавив, что код решает предупреждение о неинициализированных переменных, я могу построить решение и запустить его ... однако, когда функция GetControlInfo
называется, я получаю эту excception:
«Тип не может быть выстраивали, так как длина встроенного экземпляра массива не соответствует заявленной длине в макете»
Я считаю, подмигнули, потому что те, переменные - Char char в структуре, и они имеют фиксированную длину ... и я не как-то инициализирую g они имеют ту же длину, что и в определении структуры ...
Что я здесь делаю неправильно? Как я могу инициализировать их, чтобы компилятор не передавал мне сообщения о неинициализированных переменных, но также у меня нет проблем с маршалингом?
Спасибо!