Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Выполнение и не выполнение DLL по условию в DLL


Автор: oblom04 10.11.2005, 18:12
В главной форме я заношу исходные данные в 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;

Автор: RideX 10.11.2005, 19:03
Цитата(oblom04 @ 10.11.2005, 21:12)
if (summa>=100) and (summa<=100) then begin

Дык что за условие такое: если больше или равно и меньше или равно? Cделайте так:
Код

if summa <> 100 then begin
   oshibka := 1;
end;

Автор: Poseidon 10.11.2005, 19:07
Цитата(RideX @ 10.11.2005, 19:03)
Дык что за условие такое: если больше или равно и меньше или равно?
smile smile smile Это он хотел сказать типа
Код
if summa = 100 then...


Автор: oblom04 10.11.2005, 20:37
Как я только не пробовал: и так и этак. Но рузультат то у меня один и тотже.

Автор: RideX 10.11.2005, 21:52
oblom04, перед тем как сравнивать округляешь значение?
Код

summa := Round(summa);
if summa = 100 then begin    
   //...    
end;

Автор: oblom04 11.11.2005, 13:52
Я убрал условие в dll и переменную oshibka, а результаты она передает совершенно другие, точнее вообще ничего не считает.

А не может такого быть, что моя dll сидит где-то в памяти и использует какую-то старую версию.
Может предыдущую версию dll надо выгружать из памяти? Если да, то как?

Автор: FRAGNATIC 11.11.2005, 14:43
Цитата
А не может такого быть, что моя dll сидит где-то в памяти и использует какую-то старую версию.
Может предыдущую версию dll надо выгружать из памяти? Если да, то как?

может
попробую удалить старую длл если выскачить что занята другим процесом то тогда она висит в памяти если нет то нет =)

Автор: oblom04 11.11.2005, 14:56
Я извеняюсь, а как это сделать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)