オープンソースのC++プロジェクトをDelphi(Berlin 10.1)に変換しようとしています。それは私がDelphiのポインタにそれらを変換する方法を見つけることができないいくつかのポインタを使用します。このピースコードをC++からDelphiにどのように変換できますか?完全なコード追加した後C++からDelphiへのポインタ変換
int SolveAll(int DragFunction, double DragCoefficient, double Vi,
double SightHeight,
double ShootingAngle, double ZAngle, double WindSpeed, double WindAngle,
double** Solution)
{
double* ptr;
ptr = (double*)malloc(10*__BCOMP_MAXRANGE__*sizeof(double)+2048);
double t=0;
double dt=0.5/Vi;
double v=0;
double vx=0, vx1=0, vy=0, vy1=0;
double dv=0, dvx=0, dvy=0;
double x=0, y=0;
double headwind=HeadWind(WindSpeed, WindAngle);
double crosswind=CrossWind(WindSpeed, WindAngle);
double Gy=GRAVITY*cos(DegtoRad((ShootingAngle + ZAngle)));
double Gx=GRAVITY*sin(DegtoRad((ShootingAngle + ZAngle)));
vx=Vi*cos(DegtoRad(ZAngle));
vy=Vi*sin(DegtoRad(ZAngle));
y=-SightHeight/12;
int n=0;
for (t=0;;t=t+dt){
vx1=vx, vy1=vy;
v=pow(pow(vx,2)+pow(vy,2),0.5);
dt=0.5/v;
dv = retard(DragFunction,DragCoefficient,v+headwind);
dvx = -(vx/v)*dv;
dvy = -(vy/v)*dv;
vx=vx + dt*dvx + dt*Gx;
vy=vy + dt*dvy + dt*Gy;
if (x/3>=n){
ptr[10*n+0]=x/3;
ptr[10*n+1]=y*12;
ptr[10*n+2]=-RadtoMOA(atan(y/x));
ptr[10*n+3]=t+dt;
ptr[10*n+4]=Windage(crosswind,Vi,x,t+dt);
ptr[10*n+5]=RadtoMOA(atan(ptr[10*n+4]));
ptr[10*n+6]=v;
ptr[10*n+7]=vx;
ptr[10*n+8]=vy;
ptr[10*n+9]=0;
n++;
}
// Compute position based on average velocity.
x=x+dt*(vx+vx1)/2;
y=y+dt*(vy+vy1)/2;
if (fabs(vy)>fabs(3*vx)) break;
if (n>=__BCOMP_MAXRANGE__+1) break;
}
ptr[10*__BCOMP_MAXRANGE__+1]=(double)n;
*Solution = ptr;
return n;
}
おそらくポインタの策略を含まないソリューションがあり はここのコードです。呼び出し元サイトを確認し、インターフェースについて変更することが許可されているかどうかを知る必要があります。 –
私はすべての関数本体を読み込んでいませんでしたが、Delphiの動的配列( 'TDoubleArray = Doubleの配列;境界なし)を使う方が良いと思います。 'n'が配列の最終的な長さであれば、代わりに配列を返すことさえできます。配列を 'var'として渡してはいけません。 –