程序里面调用一个用Fortran的IVF编译器生成的DLL,
之前给DLL传一个参数是没有问题的,现在需要给DLL传多个参数,就报错了“尝试读取或写入受保护的内存,这通常指示其他内存已损坏”,
不知道这个什么原因,求解决!

解决方案 »

  1.   

    参数的类型、个数、约定(stdcall/fastcall/cdeclcall等)、指针类型、结构体封送等等都可能有问题。
      

  2.   

    //传一个文件
    [DllImport("FY.dll")]
    static extern void FY(byte[]inku,int inkulen);byte[] byuse = "D\\FD.DAT";
    JN = "D\\FD.DAT";FY(byuse,JN.Length);  //这样传一个文件运行是没问题的。
    //把DLL修改成需要传多个文件
    [DllImport("FY.dll")]
    static extern void FY(byte[]inku,int inkulen,byte[]inku1,int inkulen1,byte[]inku2,int inkulen2);byte[] byuse1 = "D\\FD1.DAT";
    JN1 = "D\\FD1.DAT";
    byte[] byuse2 = "D\\FD2.DAT";
    JN2 = "D\\FD2.DAT";
    byte[] byuse3 = "D\\FD3.DAT";
    JN3 = "D\\FD3.DAT";
    FY(byuse1,JN1.Length,byuse2,JN2.Length,byuse3,JN3.Length);  //这样给DLL传多个文件报错了“尝试读取或写入受保护的内存,这通常指示其他内存已损坏”。
    不知道这么大家能否看明白,如果不明白请提,抱歉
      

  3.   

    我记得 fortran 是传 指针的。
    而且是 __stdcall 模式的。