extern _declspec(dllexport)  double SoluteTransportSimulation(double U_X, double U_Y, double Dast, double ALPHA_L, int TSTEP)
/*
 * INPUT:
 *    U_X:
 *    U_Y:
 *    Dast:
 *    ALPHA_L:
 *
 * OUTPUT:
 *    MaxDistance:   Furthest Distance
 *    Concentration: Corresponding Concentration
 */
{
   static double MaxDistance; 
    double Concentration;
    int ii, jj, kk;
    int tt;    int NNX = XN + 1;
    int NNY = YN + 1;
    int NNZ = ZN + 1;    double ct;
    int row = 0;
    int col = 0;    double DeltaZ = DEPTH / ZN;
    double DeltaX = WIDTH_X / XN;
    double DeltaY = WIDTH_Y / YN;    double rx = DeltaT / DeltaX / DeltaX;
    double ry = DeltaT / DeltaY / DeltaY;
    double rz = DeltaT / DeltaZ / DeltaZ;
    double rx2 = DeltaT / DeltaX / 2.0;
    double ry2 = DeltaT / DeltaY / 2.0;
    double rz2 = DeltaT / DeltaZ / 2.0;    double *XX, *YY, *ZZ;    /*------------ COMPUTATION RESULTS ------------*/
    double *HydraulicHead1D;            /* n time layer Hydraulic Head h^n (1D Model)*/
    double *HydraulicHead1D2;           /* n+1 time layer Hydraulic Head h^{n+1} (1D Model)*/
    double *SoluteConcentration1D;      /* n time layer Solute Concentration (c^n) (1D Model)*/
    double *SoluteConcentration2D;      /* n time layer Solute Concentration (c^n) (2D Model)*/    /* 1D Vertical Flow Simulation & Solute Transport */
    ZZ = (double *)malloc(NNY * sizeof(*ZZ));
    for (kk = 0; kk < NNZ; kk++)
        ZZ[kk] = kk * DeltaZ;
    /* 2D Horizontal Flow Simulation & Solute Transport */
    XX = (double *)malloc(NNX * sizeof(*XX));
    YY = (double *)malloc(NNY * sizeof(*YY));
    for (ii = 0; ii < NNX; ii++)
        XX[ii] = ii * DeltaX;
    for (jj = 0; jj < NNY; jj++)
        YY[jj] = jj * DeltaY;    HydraulicHead1D = (double *)malloc(NNZ * sizeof(*HydraulicHead1D));
    HydraulicHead1D2 = (double *)malloc(NNZ * sizeof(*HydraulicHead1D2));
    SoluteConcentration1D = (double *)malloc(NNZ * sizeof(*SoluteConcentration1D));
    SoluteConcentration2D = (double *)malloc(NNX * NNY * sizeof(*SoluteConcentration2D));    /* Initial Values */
FuncGetValues1D(HydraulicHead1D, NNZ, ZZ, InitialHydraulicHead);
FuncGetValues1D(SoluteConcentration1D, NNZ, ZZ, InitialConcentration1D);
FuncGetValues2D(SoluteConcentration2D, NNX, NNY, XX, YY, InitialSoluteConcentration);    for (tt= 1; tt <= TSTEP; tt++) {
     ct = tt * DeltaT;
     /*------------------------------------------------------------------
      * --------- 1D Vertical Flow Solute Transport Simulation ----------
      * -----------------------------------------------------------------*/
     /* n time layer to n+1 time layer hydraulic head */
     WaterMovement1D(HydraulicHead1D, HydraulicHead1D2, NNZ, ct, rz, rz2);     /* n time layer to n+1 time layer solute concentration */
     SoluteTransport1D(HydraulicHead1D, HydraulicHead1D2, SoluteConcentration1D,
     NNZ, ct, rz2, DeltaZ);     VecCopy(HydraulicHead1D, HydraulicHead1D2, NNZ);
     ZeroVec(HydraulicHead1D2, NNZ);
//     bzero(HydraulicHead1D2, NNZ * sizeof(double));     /*------------------------------------------------------------------
      * ---------- 2D Plane Flow Solute Transport Simulation  -----------
      * -----------------------------------------------------------------*/
     SoluteTransport2D(SoluteConcentration2D, NNX, NNY, tt, SoluteConcentration1D[ZN],
     rx, rx2, ry, ry2, U_X, U_Y, Dast, ALPHA_L);     /* Search distance and concentration */
     Concentration = SearchMax(SoluteConcentration2D, NNX, NNY, row, col);
     MaxDistance = DeltaX * row;
    }// time marching    free(XX); free(YY); free(ZZ);
    free(HydraulicHead1D); free(HydraulicHead1D2);
    free(SoluteConcentration1D);
    free(SoluteConcentration2D);    return MaxDistance;
}
  [DllImport("simulation.dll")]        public static  extern  Double SoluteTransportSimulation(double U_X, double U_Y, double Dast, double ALPHA_L, int TSTEP);
        double sss= SoluteTransportSimulation(0.4, 1.2, 1.3, 5.0, 10);C#c语言的dll