救急啊!!!各位大侠帮帮忙吧!!!如何封送多重嵌套的数据结构到VC的DLL中
以下有GlobData/tGlobData/RoutDtFile三个数据结构,GlobData结构中有整型和字符串两种数据类型,tGlobData是以GlobData为基础的结构数组,最后在RoutDtFile结构中包含了tGlobData结构.
在程序中调用DLL时需要封送RoutDtFile这个数据结构,在VB.NET中函数如下:
Public Declare Function ReadRouteTableData Lib "ACDConsole.dll" (ByVal SockFDas As Integer, ByRef RouteTableData As RoutDtFile, ByRef ErrorCode As Integer, ByRef DetailError As Integer) As Integer
但是每次运行到这里时会出现"System.TypeLoadException: 无法封送类型 RoutDtFile 的字段 GlobalData :该字段的类型定义没有布局信息"这个错误
我在帮助文档里找不到类似的这样的结构的传递的例子,只好在这里拜托各位大侠了!
以下是使用的结构类型
'<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)>
Structure GlobData
Dim ACDGroupNo As Short
<VBFixedArray(2), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=2)> Public dummy6 As String
Dim ShareRate As Short
<VBFixedString(2), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=2)> Public dummy7 As String
End Structure
'<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)>
Structure tGlobData
<VBFixedArray(9), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStruct, SizeConst:=9)> Dim nGlobData() As GlobData
Public Sub Initialize()
ReDim nGlobData(8)
End Sub
End Structure
'<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)>
Structure RoutDtFile
Dim PilotNo As Integer
Dim RouteNo As Short
<VBFixedString(2), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=2)> Public dummy1 As String
<VBFixedString(5), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=5)> Public Step1 As String
<VBFixedString(3), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=3)> Public dummy2 As String
<VBFixedString(30), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=30)> Public transNo As String
<VBFixedString(2), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=2)> Public dummy5 As String
<VBFixedString(20), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=20)> Public Comment As String
Dim GlobalData As tGlobData
Public Sub Initialize()
GlobalData.Initialize()
End Sub
End Structure