В главной форме я заношу исходные данные в edit (их 30 штук). Считываю данные в массив sos (real) и передаю в dll. В dll в зависимости от того, равна ли сумма всех ячеек массива sos значению 100, должно происходить либо выполнение dll и передача ключа (значение kl:=1 говорит о том, что сумма равна 100) и всех результатов в основную программу, или передача только ключа (значение kl:=0, сумма не равна 100 и надо проверить исходные данные) без выполнение dll. Начинаю тестировать, задаю разные значения: целые, с одним знаком после запятой, с двумя знаками, тремя... И начинается: то работает, то не работает. Я ничего не могу понять. Помогите.
Вот фрагмент кода основной программы:
| Код | for i:=1 to 30 do case i of 1 : if form2.CheckBox1.Checked=true then val(form2.edit1.text,sos[1],code); 30 : if form2.CheckBox30.Checked=true then val(form2.edit30.text,sos[30],code); end; {--------------------обращение к DLL со свойствами газа--------------------}
svoistvadll(P1,T1,sos,Mol_ves1,Z1,Roc1,dRoc1,M1,Cp1,Ppr1,Tpr1,oshibka1);
|
Вот код DLL:
| Код | Procedure svoistvadll (P,T: real; sos : Mas01; var Mol_ves,Z,Roc,dRoc,M,Cp,Ppr,Tpr,oshibka: real); Stdcall ...... ...... {--------------------Обнуление передаваемых величин из DLL--------------------} Mol_ves := 0; Z := 0; Roc := 0; dRoc := 0; M := 0; Cp := 0; Ppr := 0; Tpr := 0;
{--------------------проверка 100 % состава газа--------------------} summa := 0; for i := 1 to 30 do summa := summa+sos[i]; oshibka:=0;
if (summa>=100) and (summa<=100) then begin oshibka:=1; ........ ........ end;
| |