Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2013, 20:24   #1
WhiskasTM
Подтвердите свой е-майл
 
Регистрация: 11.04.2012
Сообщений: 85
По умолчанию Как по указателю на массив узнать массив чего это(array of string/integer/int64...)

С рождеством.

Сабж.
Есть функция, которая принимает указатель на массив, теперь нужно определить массив чего это.Просто хочется от оберток избавиться, если возможно. Реально?


Код:
type
PStrArray = array of string;
PIntArray = array of Integer;

var
StrA:^PStrArray;
IntA:^PIntArray;

const data : array [0..4] of string = ('1','2','3','4','5');

procedure FillUp(const P:Pointer);
var
i:integer;
begin
case DynArrayTypeInfo(P^).byte of //вот тут вот я не знаю как, это абстрактно
varString:
 begin
  StrA:=P;
  SetLength(StrA^,5);
  for i:=0 to 4 do StrA^[i]:=data[i];
 end;
varInteger:
 begin
  IntA:=P;
  SetLength(IntA^,5);
  for i:=0 to 4 do IntA^[i]:=StrToInt(data[i]);
 end;
end;

procedure BtnClick.OnClick(Sender:TObject);
var
s:array of string;
i:array of integer;
begin
FillUp(@s);
FillUp(@i);
end;
WhiskasTM вне форума Ответить с цитированием
Старый 07.01.2013, 20:32   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Используйте тип Variant.
По указателю может быть что угодно, абсолютно все.
Человек_Борща вне форума Ответить с цитированием
Старый 07.01.2013, 20:41   #3
WhiskasTM
Подтвердите свой е-майл
 
Регистрация: 11.04.2012
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Используйте тип Variant.
По указателю может быть что угодно, абсолютно все.
Т.е. вместе @s/@i посылать varString/varInteger? Или сразу array of Variant всегда юзать? Первое как-то проще.

Хотя я думал где-то данные о массиве все же хранятся, выходит все эти "array of" просто массив указателей на куски данных где-то в памяти?
WhiskasTM вне форума Ответить с цитированием
Старый 07.01.2013, 20:57   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Первое как-то проще.
Первое тебя не спасет. Второе бери однозначно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.01.2013, 21:11   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Хотя я думал где-то данные о массиве все же хранятся, выходит все эти "array of" просто массив указателей на куски данных где-то в памяти?
Не где-то а там куда указывает указатель, и там просто кусок памяти.

Variant специально создан чтобы безопасно и удобно передавать любые типы данных с помощью OLE технологии, а на приемнике безопасно принимать и определять тип данных.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Array of ^Integer как подобраться к нужному индексу? WhiskasTM Общие вопросы Delphi 2 31.08.2012 12:08
Перевод массива string в массив real/integer АлексВ Паскаль, Turbo Pascal, PascalABC.NET 2 18.05.2012 21:53
Как создать массив string в с++? WOLFak Помощь студентам 1 07.04.2012 12:51
Присвоение указателю на массив значения Jugger Помощь студентам 1 18.01.2011 17:36
задать массив типа X: array [0..N] of integer -где N переменная читаеться из EditBox Kivin13 Общие вопросы Delphi 22 06.09.2007 09:25