var
a2:Single;
a3:single;
begin
a2:=MP[0];
a3:=MP[0];
end;在dll里面编译,为什么a2这行不执行呢?出什么错了.MP这个数组的值也有,就是不能传给a2. 传给a3没有问题.
a2在程序后面用到了,a3没有,所以a3能执行.所以这可以理解为后面a2使用中出了问题吗?还是怎么回事?
请教,不知哪位也碰到过这种情况.
a2:Single;
a3:single;
begin
a2:=MP[0];
a3:=MP[0];
end;在dll里面编译,为什么a2这行不执行呢?出什么错了.MP这个数组的值也有,就是不能传给a2. 传给a3没有问题.
a2在程序后面用到了,a3没有,所以a3能执行.所以这可以理解为后面a2使用中出了问题吗?还是怎么回事?
请教,不知哪位也碰到过这种情况.
STRBB:String;MS, NS , GGNG:single;Mv, MCv, MPv:variant; MU, NE , MD, RM , MA, MB, MinD:single;Prv, TFv:variant;KF, KU, KD,DRRR,RR, RR0:Single):integer;stdcall;
Const
PI = 3.1415926;
var
P,AA,I,K1,K3,G,KK1,GN:Integer;
Pu:Single;
TFU1:Single;
TFD,MCMAX:Single;
DFD,FDF,RR1,RR2,RR3,PD:Single;
KKU2,DKK2,KKD2,WCB,WWW,KRW:Single;
EFF_GROUND,C1,C2:Single;
RU,Eff_xq:single;
RN, NA, E1:single;
AI0, PSIB, PSI, PSIT, ALPHA, BETA, f0:single;
RR4,NPH0:single;
U,F:array of single;
KK,AI,M,MC,MP:array of single;
Pr,TF:array of single;
dkk:array [0..1000] of single;
begin Setlength(U,0);
SetLength(F,0);
Setlength(M,Num);
Setlength(Mc,Num);
Setlength(MP,Num);
Setlength(Pr,Num);
Setlength(TF,Num);
Setlength(KK,Num);
Setlength(AI,Num);
U:=Uv;
F:=Fv; RR0:= RR;
For P:= 0 To Num-1 do
begin
If CA= 1 Then
begin
AI0:= P * PI / HalfN;
Get_ALPHABETA(AI0, P, STRMN, STRBB, Pr, IM, HG, A, B, LU, SL, RU, PSIB, PSI, PSIT, ALPHA, BETA, f0);
Pr[P]:= (PSIB - PSI) / (PSIB - PSIT);
AI[P]:= AI0;
TF[P]:= A * RU / B * Sin(ALPHA) / Sin(BETA);
MP[P]:= TF[P] * (F[P] - (BU + C / A * Wb));
WCB:= NPH * WCBP;
MCMAX:= WCB * RR + WC * RC;
MC[P]:= -MCMAX * Sin(AI[P] + GAMA / 180 * 3.14);
M[P]:= MP[P] + MC[P];
end
Else
begin
Pr[P]:= U[P] / SL;
Get_AI(HalfN,P, STRMN, STRBB, Pr, IM, HG, A, B, LU, SL, RU, f0, PSIB, PSI, PSIT, ALPHA, BETA,AI0);
Get_ALPHABETA(AI0, P, STRMN, STRBB, Pr, IM, HG, A, B, LU, SL, RU, PSIB, PSI, PSIT, ALPHA, BETA, f0);
AI[P]:= AI0;
TF[P]:= A * RU / B * Sin(ALPHA) / Sin(BETA);
MP[P]:= TF[P] * (F[P] - (BU + C / A * Wb));
WCB:= NPH * WCBP;
MCMAX:= WCB * RR + WC * RC;
MC[P]:= -MCMAX * Sin(AI[P] + GAMA / 180 * 3.14);
M[P]:= MP[P] + MC[P];
End;
end;
Pu:=MP[0];
IIU:=0; M[Num]:= M[0];
MC[Num]:= MC[0];
MP[Num]:= MP[0];
MU:= M[0];
MD:= M[HalfN];
PD:= MP[HalfN];
TFU1:= TF[0];
TFD:= TF[HalfN];
IID:= HalfN;
For I:= 0 to HalfN-1 do
begin
If (MU < M[I]) Then
begin
Pu:=MP[I];
MU:=M[I];
TFU1:=TF[I];
IIU:= I;
end;
If MD < M[I + HalfN] Then
begin
MD:= M[I + HalfN];
PD:= MP[I + HalfN];
TFD:= TF[I + HalfN];
IID:= I + HalfN;
end;
end;
C1:= 0; C2:= 0; MA:= 0; MB:= 0;
For I:= 1 To Num do
begin
C1:= C1 + M[I] * M[I];
C2:= C2 + M[I];
end;
MB:= Sqrt(C1 / Num);
MA:= C2 / Num;
KF:= MB / MA;
KU:= MB / MU;
If MD= 0 Then
KD:= 0
Else
KD:= MB / MD; If (MU > MD) Then
RM:= MU / MS * 100
Else
RM:= MD / MS * 100;
E1:= NP / (0.9 * 974);
NA:= MA * E1;
NE:= MB * E1;
RN:= NE / NS * 100;
If MU > MD Then
MinD:= MD / MU
Else
MinD:= MU / MD;
RR4:= RR;
NPH0:= NPH;
KK1:= KK0;
KK0:= 0;
// Write_Data(M(), MC(), MP(), KK0, IID, IIU, DRRR, NPH, AA, GN, MS, NS, NP, GGNG, TF());
KK0:= KK1;
//按偏方和法则调平衡
If KK0 = 1 Then
begin
K1:= 0;
While (RR < 0) Or (RR > (2 * RC)) Or (K1 < 3) do
begin
For P:= 0 To Num-1 do
begin
WCB:= NPH * WCBP;
MCMAX:= WCB * RR + WC * RC;
MC[P]:= -MCMAX * Sin(AI[P] + GAMA / 180 * 3.14);
M[P]:= MP[P] + MC[P];
end;
M[Num]:= M[0];
MC[Num]:= MC[0];
MP[Num]:=MP[0];
MU:= M[0];
MD:=M[HalfN];
Pu:=MP[0];
PD:= MP[HalfN];
TFU1:= TF[0];
TFD:=TF[HalfN];
IIU:= 0;
IID:= HalfN;
For I:= 0 To HalfN-1 do
begin
If (MU < M[I]) Then
begin
MU:=M[I];
Pu:=MP[I];
TFU1:=TF[I];
IIU:=I;
End;
If (MU >= M[I]) Then
begin
If MD < M[I + HalfN] Then
begin
MD:=M[I + HalfN];
PD:=MP[I + HalfN];
TFD:=TF[I + HalfN];
IID:=I + HalfN;
End;
End;
end;
C1:= 0; C2:= 0;MA:=0;MB:=0;
For I:= 1 To Num do
begin
C1:= C1 + M[I] * M[I];
C2:= C2 + M[I];
end;
MB:=Sqrt(C1 / Num);
MA:=C2 / Num;
KF:= MB / MA;
KU:= MB / MU;
If MD = 0 Then
KD:= 0
Else
KD:= MB / MD; If MU > MD Then
RM:= MU / MS * 100
Else
RM:= MD / MS * 100;
E1:= NP / (0.9 * 974);
NA := MA * E1;
NE := MB * E1;
RN := NE / NS * 100; If MU > MD Then
MinD:= MD / MU
Else
MinD := MU / MD; KK[G]:= 0; DFD:= 0; FDF:= 0;
K1:= K1 + 1;
For I:= 1 to Num do
begin
KK[G]:= KK[G] + M[I] * M[I];
DFD:= MP[I] * Sin(AI[I] + GAMA * 3.1415 / 180) + DFD;
FDF:= FDF + power(Sin(AI[I] + GAMA * 3.1415 / 180),2);
end;
KK[G + 1]:= MA * MA * Num;
dkk[G]:= Abs(KK[G] - KK[G + 1]);
If RR < 0 Then
begin
NPH:= NPH - 2;
RR:= RR4;
G:= 0;
WWW:= 0;
KRW:= 0;
end;
If RR > (2 * RC) Then
begin
NPH:= NPH + 2;
RR:= RR4;
G:= 0;
WWW:= 0;
KRW:= 0;
end;
If NPH = 0 Then WWW:= 1;
If K1 = 5 Then WWW:= 1;
WCB:= NPH * WCBP;
If WWW = 1 Then
begin
DRRR:= RR1 - RR4;
RR:= RR1;
// Write_Data(M(), MC(), MP(), KK0, IID, IIU, DRRR, NPH, AA, GN, MS, NS, NP, GGNG, TF())
Exit;
End;
If NPH = 0 Then
begin
WWW:= 1;
RR:=0;
end
Else
begin
RR:= (DFD / FDF - WC * RC) / WCB;
RR1:= RR;
End; DRRR:= RR1 - RR4;
// Call Write_Data(M(), MC(), MP(), KK0, IID, IIU, DRRR, NPH, AA, GN, MS, NS, NP, GGNG, TF())
// Loop While (RR < 0 Or RR > 2 * RC) Or (K1 < 3)
end;
end;
end;
IIU
TF1
这三个变量都不能,其他没问题
[Hint] Unit1.pas(172): Value assigned to 'Pu' never used