我正在尝试从代码中的一个类初始化一个结构。这是一个第三方类,.NET的文档很少到零,所以我被困在了一些Char变量的初始化中,这些变量是在结构中用固定长度定义的。
这是第三节课的结构。
<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如果我没有在创建CSys之后立即添加这个变量初始化代码:
CNCSys.addinfo = 0
CNCSys.max_axis = 0
CNCSys.cnc_type = ""
CNCSys.mt_type = ""
CNCSys.series = ""
CNCSys.version = ""
CNCSys.axes = ""我在错误列表区域得到了恼人的消息(因为我没有从结构中初始化变量):
“警告变量'CNCSys‘在被赋值之前通过引用传递。在运行时可能会出现空引用异常。请确保结构或所有引用成员在使用”“之前都已初始化。
好的,添加该代码可以解决非初始化变量的警告,我可以构建解决方案并运行,它.然而,当函数GetControlInfo被调用时,我得到了以下异常:
无法封送“类型”,因为嵌入数组实例的长度与布局中声明的长度不匹配“
我相信这是因为这些变量是结构中的字符,它们有固定的长度.我并没有用它们在结构定义中的长度来初始化它们.
我在这里做错什么了?我如何初始化它们,这样编译器就不会抛出关于未初始化变量的消息,而且我在封送处理方面也不会有问题。
谢谢!
发布于 2016-08-06 21:10:30
定义告诉您每个字符串应该有多少个字符,所以尝试"“而不是”SizeConst=2“,但不确定大小是否以字节为单位,在这种情况下,请尝试”“。
对SizeConst=4也做类似的操作
发布于 2016-08-07 01:12:51
看看这是否有帮助
CNCSys.addinfo = 0S
CNCSys.max_axis = 0S
CNCSys.cnc_type = {" "c, " "c}
CNCSys.mt_type = {" "c, " "c}
CNCSys.series = {" "c, " "c, " "c, " "c}
CNCSys.version = {" "c, " "c, " "c, " "c}
CNCSys.axes = {" "c, " "c}另外,GetControlInfo需要一个As子句。
https://stackoverflow.com/questions/38808019
复制相似问题