Текущий архив: 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.48 MB
Время: 0.007 c