![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамические массивы [D7, XP]
Алексей © (2008-01-28 22:31:00)Вопрос состоит в следующем:
текст программы по сути такой:
Unit1;
interface
type
PArray = ^TArray;
TArray = array of Cardinal;
var
A: TArray;
procedure GetA(Param: Pointer); {передать TArray}
var
PA: PArray;
begin
A[0]:= 10;
PA:= @A;
Param:= PA;
end;
end;
Unit2;
Interface
Uses
Unit1;
procedure Test;
var
A: TArray;
PA: PArray;
begin
GetA(PA);
A:= PA^;
end;
не работает.
почему не помню? Очень попрошу помочь.
DVM (2008-01-28 23:43:00) [1]
> Для себя у меня была функция работающая по аналогичному
> принципу
Возьми GetDIBits не мучайся.
DVM (2008-01-28 23:38:00) [2]
> Алексей ©
The GetBitmapBits function is not implemented in the Win32 API.
Это ничего что так?
Алексей (2008-01-28 23:36:00) [3]есть функция GetBitmapBits(Bitmap: HBitmap; Size: Cardinal; Bits: Pointer):...,
где передаются PIntegerArray. Для себя у меня была функция работающая по аналогичному принципу, но я все убил... Как это работает не помню. Попрошу помочь.
{RASkov} (2008-01-28 22:57:00) [4]> [5] DVM © (28.01.08 22:53)
Ну может автор все таки расскажет, что же именно он задумал :)
А вообще... похоже (
{RASkov} (2008-01-28 22:55:00) [5]> В процедуру GetA можно переделать вот так:
> procedure GetA;
> begin
> A[0]:= 10;
> end;
Не учел
> TArray = array of Cardinal;
>
> var
> A: TArray;
Т.е. процедуру GetA можно переделать вот так:
procedure GetA;
begin
SetLength(A, 1);
A[0]:= 10;
end;
Глупо конечно это все, но пример в [0] без комментариев автора еще глупее кажется :(
DVM (2008-01-28 22:53:00) [6]
> {RASkov} ©
Это какое то задание типа исправь все ошибки.
{RASkov} (2008-01-28 22:51:00) [7]> [0] Алексей © (28.01.08 22:31)
А можно вопрос:
Для чего вообще указатели в данном примере нужны?
В процедуру GetA можно переделать вот так:
procedure GetA;
begin
A[0]:= 10;
end;
Ну и соответственно Test будет вот таким:
procedure Test;
begin
GetA;
//У нас теперь есть А, т.е. Unit1.A;
end;
Вообщем вопрос с примером не понятные :(
DVM (2008-01-28 22:48:00) [8]
> Семеныч
И это еще не все. А автору вопроса надо хоть чуть чуть думать головой начать самому.
Семеныч (2008-01-28 22:46:00) [9]1. PArray и всю работу с указателями выбросьте. Динамический массив - сам по себе уже указатель. См. справку.
2. Перед использованием динамического массива ему надо назначить длину. См. SetLength.
3. procedure GetA( var Param: Pointer);
Иначе присвоение Param:= PA не имеет никакого смысла. Изучите передачу параметров по ссылке и по значению.
Хотя процедура GetA не нужна совсем.
DVM (2008-01-28 22:36:00) [10]
> не работает.
Оно прямо так и говорит "Не работаю" ?