Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
Алексей ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.043 c
2-1201780574
mikola
2008-01-31 14:56
2008.02.24
коментарий к картинке


15-1201252151
tolyan
2008-01-25 12:09
2008.02.24
загрдиск


15-1200923748
Dmitry S
2008-01-21 16:55
2008.02.24
Печать с помощью mshtml.dll,PrintHTML без диалога


15-1201091326
Bober_crazy
2008-01-23 15:28
2008.02.24
Ошибка 530 Authentication failed, sorry


2-1201517761
Neo
2008-01-28 13:56
2008.02.24
Вопрос по SQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский