|
Создание объектов в новом месте памяти (Delphi). | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
19.09.11
✎
00:36
|
Сломал мозг.
Есть код: var obj:TMyObject; begin for i:=1 To 10 do begin obj:=TMyObject.Create(); obj.ID:=i; SaveObject(@obj); // там указатель на объект сохраняется в TList, мы его не теряем и о нем позаботимся. end; Теперь проблема - в каждой итерации объект создается в том же месте памяти и затирает предыдущий объект. Как его разместить в новом месте? |
|||
1
Rie
19.09.11
✎
01:30
|
(0) Не понял. @obj - это адрес именно obj. Он - один и тот же, пока переменная obj существует.
|
|||
2
H A D G E H O G s
19.09.11
✎
01:36
|
(1) Перефразирую.
Мне надо создать 10 разных объектов 1-ого класса. |
|||
3
Rie
19.09.11
✎
01:37
|
(2) Это я понял. Но они и создаются спокойненько.
У меня есть подозрение, что всё портит SaveObject. Что ты сохраняешь в список не тот адрес. |
|||
4
NS
19.09.11
✎
02:19
|
for i:=1 To 10 do begin
obj[i]:=TMyObject.Create(); obj[i].ID:=i; |
|||
5
NS
19.09.11
✎
02:28
|
Ты получаешь адрес переменной obj, которая естественно всегда остается в одном месте памяти.
А ссылкой на созданный объект конечно-же является не @obj, а сама переменная obj. |
|||
6
NS
19.09.11
✎
02:28
|
(4) я это не отправлял :)
|
|||
7
NS
19.09.11
✎
02:30
|
(3) Нет, всё портит непонимание типа переменной
var obj:TMyObject; Это ссылка на объект, а сама переменная находится по фиксированному адресу. |
|||
8
NS
19.09.11
✎
02:31
|
(3) Да, он не то сохраняет в список.
|
|||
9
Rie
19.09.11
✎
02:33
|
(7) Об этом я писал в (1). Но что внутри у SaveObject - нам пока неизвестно.
|
|||
10
NS
19.09.11
✎
02:34
|
Но судя по тому что он изначально передает @obj - он уже запутался.
|
|||
11
Rie
19.09.11
✎
02:38
|
(10) Согласен.
|
|||
12
H A D G E H O G s
20.09.11
✎
02:40
|
Спасибо, добрые люди.
Теперь еще вопрос - как получить адрес метода объекта: Вот как-то так: нужно call-back указать: CreateThread(nil,0,@Self.ThreadProc,nil,0,PID); Нэ получается. |
|||
13
H A D G E H O G s
20.09.11
✎
02:45
|
Так, кажись нашел
self.MethodAddress('ThreadProc') |
|||
14
Rie
20.09.11
✎
04:34
|
(12) Можно завести переменную нужного типа, например,
var ThrP: procedure of object; stdcall; и затем ThrP := ThreadProc; CreateThread(nil,0,ThrP,nil,0,PID) |
|||
15
H A D G E H O G s
20.09.11
✎
10:58
|
(14) Точняк! Спасибо.
|
|||
16
H A D G E H O G s
20.09.11
✎
10:58
|
Но и (13) работает!
|
|||
17
Rabbit
20.09.11
✎
13:15
|
(2) 10 объектов - это массив, или я чего-то не понимаю?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |