找回密码
 注册
Simdroid-非首页
查看: 90|回复: 0

[3. Fortran] 怎样用c#由dll调用含有数组的结构体定义的数组

[复制链接]
发表于 2008-10-7 12:47:52 | 显示全部楼层 |阅读模式 来自 北京
fortran代码:
=========================
module test

    type testtype
       sequence
       integer*4 :: c
       integer*4 :: d(4)      
       real*8 :: e
       real*8 :: f(3)
    end type testtype

    type(testtype), dimension(5,5) :: aa

contains

  subroutine MUTILARRAY(bb,a1,a2)
    !DEC$ ATTRIBUTES DLLEXPORT :: MUTILARRAY
    implicit none
    integer*4 :: i,j,k,a1,a2,l
    real*8, dimension(a1:a2) :: b_te
    real*8 :: bb

    do i=1,5
       do j=1,5
          aa(i,j).c=bb
          aa(i,j).e=bb*2.5            
          do k=1,3
             aa(i,j).d(k)=bb*3
             aa(i,j).f(k)=bb*1.5
          end do
       end do
    end do
   
    forall(l=1:3)
       b_te(l)=aa(1,3).f(l)
    end forall

   
  end subroutine MUTILARRAY

end module test
=======================================
c#代码
=======================================
public partial class Form1 : Form
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct aaa
        {
             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
             public double[] f;            
        }

        aaa[] ate = new aaa[5];
调用:
[DllImport("testdll.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Winapi)]
            public static extern void MUTILARRAY(double dd, aaa[] ate);
============================================
发现由c#调用时,如果结构体含有数组,那么结构体定义数据,如果结构体不含有数组,用结构体定义数组,这样数据套数组或者数组套数据都没有问题。但是如果结构体含有数组,再用结构体定义数组,即数组套数组就会出现传递值出错的情况。请问如何解决这个问题?

[ 本帖最后由 piteqiu 于 2008-10-7 12:50 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-1 13:30 , Processed in 0.059801 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表