我无法将结构或类从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
在Fortran方面:
module Test
type Ppkg
integer :: id
integer, pointer :: arr(:)
end type
contains
subroutine sub1(aPpkg)
type(Ppkg), intent(inout) :: aPpkg
!DEC$ ATTRIBUTES DLLEXPORT :: sub1
!DEC$ATTRIBUTES STDCALL :: sub1
!DEC$ATTRIBUTES ALIAS : 'sub1' :: sub1
!DEC$ ATTRIBUTES REFERENCE :: aPpkg
! ... do something
end subroutine sub1
end module Test
当从vb.net调用sub1时,我无法访问aPpkg%arr的成员。但是,如果我在结构或类的定义中使用以下内容:
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Dim arr() As Integer
并在类型定义(Fortran)中使用:
integer :: arr(4)
事情有效,但数组的大小是固定大小而不是动态的。有帮助吗?提前谢谢!