如何将动态结构从vb.net传递到Fortran DLL

如何将动态结构从vb.net传递到Fortran DLL,vb.net,dll,fortran,Vb.net,Dll,Fortran,我无法将结构或类从vb.net传递到Fortran DLL。我特别希望传递一个包含动态成员的结构或类(即具有动态内存分配的1D数组)。我实际上可以传递固定大小的数组,但不能传递动态数组。任何帮助都将不胜感激 例如,如果我有以下结构: Module Module1 <DllImport(DLL path, CallingConvention:=CallingConvention.StdCall)> _ Sub sub1(ByRef ppkg As Ppkg) End Sub <

我无法将结构或类从vb.net传递到Fortran DLL。我特别希望传递一个包含动态成员的结构或类(即具有动态内存分配的1D数组)。我实际上可以传递固定大小的数组,但不能传递动态数组。任何帮助都将不胜感激

例如,如果我有以下结构:

Module Module1
<DllImport(DLL path, CallingConvention:=CallingConvention.StdCall)> _
Sub sub1(ByRef ppkg As Ppkg)
End Sub

<StructLayout(LayoutKind.Sequential)>
Structure Ppkg
   Dim id As Integer
   Dim arr() As Integer
End Structure

Sub Main()
    Dim pkgx As Ppkg = New Ppkg()
    sub1(pkgx)
End Sub 
从vb.net调用sub1时,我无权访问aPpkg%arr的成员。但是,如果我希望在结构或类的定义中使用以下内容:

<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Dim arr() As Integer

虽然一切正常,但数组的大小是固定的,而不是动态的。有什么帮助吗?提前谢谢你

Fortran指针组件所使用的描述符和VB结构的数组成员所在的位置不太可能兼容。您必须使用较低级别的方法,例如使用指向数组数据的C指针。我应该如何在Fortran中使用C指针?
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Dim arr() As Integer
integer :: arr(4)