var
    a2:Single;
    a3:single;
begin
      a2:=MP[0];
      a3:=MP[0];
end;在dll里面编译,为什么a2这行不执行呢?出什么错了.MP这个数组的值也有,就是不能传给a2.  传给a3没有问题.
a2在程序后面用到了,a3没有,所以a3能执行.所以这可以理解为后面a2使用中出了问题吗?还是怎么回事?
请教,不知哪位也碰到过这种情况.

解决方案 »

  1.   

    Function Cal_NJ(IIU,IID,Num,HalfN:Integer;Uv, Fv:variant; SL,NP:Single;CA,KK0, STRMN, NPH:Integer; A,B , LU, HG , IM, BU , WC, WCBP, RC, C , Wb, GAMA: Single;
                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;
      

  2.   

    Pu
      IIU
      TF1
    这三个变量都不能,其他没问题
      

  3.   

    代码优化,3个变量都没有被使用过,无论你怎么赋值都没用的
    [Hint] Unit1.pas(172): Value assigned to 'Pu' never used