c#调用c语言的dll 错误:尝试读取或写入受保护的内存,这通常指示其他内存已损坏。
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")]C# c语言的dll --------------------编程问答-------------------- 确认调用约定是否正确,c++默认不是stdcall --------------------编程问答--------------------
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++方法内部出错了吧。 --------------------编程问答-------------------- 学会自己调试吧,你代码太长,有些函数别人也不清楚具体如何实现,无法直接给出你答案,
据我猜测,非常有可能是你访问数组时候越界了
补充:.NET技术 , C#