Главная страница
    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.48 MB
Время: 0.007 c
8-27128
hoaxer
2002-05-06 10:47
2002.09.09
alpha transparence


14-27228
vedmed
2002-08-16 10:45
2002.09.09
Что бы это значило? (var c: Char; ... c := ^A)


1-27033
AFROLOV
2002-08-27 15:23
2002.09.09
Несколько проблем при использовании ScriptControl


1-27054
olban
2002-08-27 11:10
2002.09.09
Постоянный размер шрифта


1-26980
AFROLOV
2002-08-29 16:09
2002.09.09
Передача объекта в качестве параметра в метод сервера OLE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский