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

Вниз

Динамические массивы   Найти похожие ветки 

 
Алексей ©   (2008-01-28 22:31) [0]

Вопрос состоит в следующем:

текст программы по сути такой:

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 22:36) [1]


> не работает.

Оно прямо так и говорит "Не работаю" ?


 
Семеныч   (2008-01-28 22:46) [2]

1. PArray и всю работу с указателями выбросьте. Динамический массив - сам по себе уже указатель. См. справку.

2. Перед использованием динамического массива ему надо назначить длину. См. SetLength.

3. procedure GetA(var Param: Pointer);
Иначе присвоение  Param:= PA не имеет никакого смысла. Изучите передачу параметров по ссылке и по значению.

Хотя процедура GetA не нужна совсем.


 
DVM ©   (2008-01-28 22:48) [3]


> Семеныч

И это еще не все. А автору вопроса надо хоть чуть чуть думать головой начать самому.


 
{RASkov} ©   (2008-01-28 22:51) [4]

> [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:53) [5]


> {RASkov} ©  

Это какое то задание типа исправь все ошибки.


 
{RASkov} ©   (2008-01-28 22:55) [6]

> В процедуру 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] без комментариев автора еще глупее кажется :(


 
{RASkov} ©   (2008-01-28 22:57) [7]

> [5] DVM ©   (28.01.08 22:53)

Ну может автор все таки расскажет, что же именно он задумал :)
А вообще... похоже (


 
Алексей ©   (2008-01-28 23:36) [8]

есть функция GetBitmapBits(Bitmap: HBitmap; Size: Cardinal; Bits: Pointer):...,
где передаются PIntegerArray. Для себя у меня была функция работающая по аналогичному принципу, но я все убил... Как это работает не помню. Попрошу помочь.


 
DVM ©   (2008-01-28 23:38) [9]


> Алексей ©

The GetBitmapBits function is not implemented in the Win32 API.

Это ничего что так?


 
DVM ©   (2008-01-28 23:43) [10]


> Для себя у меня была функция работающая по аналогичному
> принципу

Возьми GetDIBits не мучайся.



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

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

Наверх




Память: 0.49 MB
Время: 0.019 c
15-1201188142
Anatoly Podgoretsky
2008-01-24 18:22
2008.02.24
Что хотят, то и творят.


15-1200751022
voidMan
2008-01-19 16:57
2008.02.24
Скачано или скачЕНо - как правильно?


15-1201259913
Asker
2008-01-25 14:18
2008.02.24
Сетевая утилита командной строки чтобы отправить сообщение


15-1201076825
samalex
2008-01-23 11:27
2008.02.24
Конвертация BMP в PDF


2-1201877220
Adios
2008-02-01 17:47
2008.02.24
форма вместо рабочего стола