Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.09;
Скачать: CL | DM;

Вниз

Как проверить?   Найти похожие ветки 

 
Igel ©   (2002-08-29 12:38) [0]

Есть динамический массив:

s:array of Variant;

Как мне узнать есть-ли там данные, массив возвращает функция, нужно проверить не пустой-ли он?


 
Skier ©   (2002-08-29 12:40) [1]

>Igel
1) <> nil
2) for ii := Low(...) to High(...) do CheckElement


 
Igel ©   (2002-08-29 13:13) [2]


type TVarArray = array of variant;

function SpisokRazValue(key:string; param:boolean):TVarArray;
...
var znach:TVarArray;
begin
//Здесь возникает ошибка...
znach := SpisokRazValue(Key, Param);
...

В чем прикол?


 
Skier ©   (2002-08-29 13:15) [3]

>Igel

> В чем прикол?

Трудно угадать...
Но, может в отсутсвии след. строки в теле SpisokRazValue
SetLength(Result, ElementCount);


 
Igel ©   (2002-08-29 13:20) [4]

> Skier
В теле функции SpisokRazValue, если нету элементов для добавления я сразу Result:=nil;, может я не прав?
И надо сразу SetLength(Result, 0); ?


 
Skier ©   (2002-08-29 13:22) [5]

>Igel
Давай не будет гадать...
Покажи код SpisokRazValue.


 
Igel ©   (2002-08-29 13:35) [6]

Вот код:

function SpisokRazValue(key:string; param:boolean):TVarArray;
var Path_all:TPath_reg;
List_sub:tstringList;
i:integer;
begin
Path_all := Get_rootKey(Key);
result:=nil;
try
//Создание переменной, типа TRegistry.
Reg:=TRegistry.Create(Key_read);
Reg.RootKey := Path_all.Root ;
//если есть ключ
if reg.KeyExists (Path_all.Path) then
//Если открыт
if reg.OpenKeyReadOnly (Path_all.Path) then
begin
List_sub := tstringList.Create ;
if param then
reg.GetKeyNames (List_sub) else
reg.GetValueNames (List_sub);
//Переводим в результат
if List_sub.Count > 0 then
begin
setlength (result, List_sub.Count);
for i:=0 to List_sub.Count-1 do
begin
result[i]:=list_sub.Strings [i];
end;
end else setlength(result,0);//result:=nil;
List_sub.Free;
end else setlength(result,0);//result:=nil;
finally
Reg.CloseKey;
reg.Free ;
end;
if result=nil then showmessage("END");
end;


 
Skier ©   (2002-08-29 13:38) [7]

>Igel
Вот эти две одинаковых строчки убери (не нужны они)
else setlength(result,0);//result:=nil;

Легче не станет ?



 
Igel ©   (2002-08-29 13:52) [8]

Я это прописал, поскольку была ошибка... и без них не работало..


 
Skier ©   (2002-08-29 13:54) [9]

>Igel


 
Skier ©   (2002-08-29 13:55) [10]

>Igel



> Я это прописал, поскольку была ошибка...


Где и какая именно ?


 
Igel ©   (2002-08-29 14:12) [11]

Проблема в том, что не знаю, она на этапе выполнения возникает... Я делаю независимую ДЛЛ-ку...


 
Igel ©   (2002-08-29 14:19) [12]

Выдает на этапе компиляции:

[Warning] LispFunc.pas(316): Variable "znach" might not have been initialized

Не могу понять о чем предупреждает?


 
Skier ©   (2002-08-29 14:20) [13]

>Igel

> Я делаю независимую ДЛЛ-ку...

А вот с этого надо было начинать !
Ты случайно этот массив не передаёшь потом в качестве
параметра в DLL-функцию ? (Или возвращаешь в качестве результата
DLL-функции ?)



 
Skier ©   (2002-08-29 14:23) [14]

>Igel


> [Warning] LispFunc.pas(316): Variable "znach" might not
> have been initialized


Предупреждает что znach может быть неинициализированной,
но к SpisokRazValue это не относится.


 
Igel ©   (2002-08-29 14:39) [15]

Нет... все в пределах одного модуля...
Одна функция вызывает другую, обрабатывает результат и вот она уже является внешней... Но дело в том, что ошибка при получении данных из функции в строке:

//Здесь возникает ошибка...
znach := SpisokRazValue(Key, Param);

SpisokRazValue - локальная функция


 
Skier ©   (2002-08-29 14:46) [16]

>Igel


function SpisokRazValue(key:string; param:boolean):TVarArray;
var
ii : Integer;
begin
SetLength(Result, 10);
for ii := 0 to 9 do Result[ii] := IntToStr(ii);
end;


//................


znach := SpisokRazValue("Empty", True);
Finalize(znach);


Код - работает.
Может у тебя ошибка при работе с Reg
или ты что-то напартачил при вызове функции ?


 
Skier ©   (2002-08-29 14:47) [17]

>Igel
Попробуй подсунуть мою функцию - ошибка останется ?


 
McSimm ©   (2002-08-29 14:57) [18]

Текст сообщения об ошибке так и не прозвучал.

Отлаживать DLL совсем не сложно. См. Run/Parameters/Host Application

List_sub.Free тоже желательно в finally ставить.


 
Skier ©   (2002-08-29 14:59) [19]

>McSimm

>Одна функция вызывает другую, обрабатывает результат и вот она >уже является внешней...
>SpisokRazValue - локальная функция

"Этот плакатик внимательно изучал ?" :))


 
McSimm ©   (2002-08-29 15:01) [20]

>Skier © (29.08.02 14:59)
Ну, со второго раза смысл понял.


 
Igel ©   (2002-08-30 06:34) [21]

С нового взгляда нашел ошибку... Я ДУРАК!!!
Всем спасибо...

Прикол был в следующем:

type TVarArray = array of variant;

function SpisokRazValue(key:string; param:boolean):TVarArray;
...
var znach:TVarArray;
begin
//Здесь возникает ошибка... - на самом деле после вызова
znach := SpisokRazValue(Key, Param);
//Выводил отладочную информацию
showmessage("test - "+znach[30]);
//Тогда как мог быть пустым массив... :))
...

И ведь цельный день прикол искал :)) А с утра глянул чуть со смеху не умер... Всем спасибо... заработало!!!



Страницы: 1 вся ветка

Текущий архив: 2002.09.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
7-27249
Varfolomey
2002-05-15 23:11
2002.09.09
USB?


1-26947
KIR
2002-08-23 13:28
2002.09.09
Как правильно использовать функцию DrawTextEx?


3-26899
Art1
2002-08-20 11:04
2002.09.09
Как закрыть парадоксовские базы паролем?


14-27167
esprit_bel
2002-08-12 08:41
2002.09.09
Машина времени


1-27082
ssv
2002-08-22 14:12
2002.09.09
Объясните как это работает