Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > FillChar и динамический массив


Автор: LionHeart 21.11.2007, 10:53
Приветствую.  smile 
Такой вот фрагмент кода: (при помощи MAPI надо послать сообщение)
Код

var
  mapiReceips: array of TMAPIRecipDesc;
    receipCnt: Word;
    ...........................
    ...........................

Код

....................
....................
  receipCnt := lbxRecepients.Count;
  if receipCnt <> 0 then
    begin
      SetLength(mapiReceips,receipCnt);
      FillChar(mapiReceips,receipCnt * SizeOf(TMAPIRecipDesc),#0);

      for i := 0 to (receipCnt - 1) do
        with mapiReceips[i] do
          begin
            ulRecipClass := MAPI_TO;
            lpszName := PChar(lbxRecepients.Items.Strings[i]);
            lpszAddress := PChar('SMTP: ' + lbxRecepients.Items.Strings[i]);
          end;
    end
  else
    raise Exception.Create('No recepients added');
....................
....................

Я не понимаю почему не обнуляется динамический массив.
Если я закомментирую строку с FillChar,то все Ок.Но если оставляю,то он выдает мне ошибку времени выполнения,на строке ulRecipClass := MAPI_TO;
Это означает что я каким-то образом повреждаю массив до его использования,скорее всего этим FillChar.Пробовал определять отдельный тип данных в виде динамического массива,но тоже не катит.

PS.Вариант с поэлементным обнулением в цикле не рассматривается.

Автор: MetalFan 21.11.2007, 10:56
Код

FillChar(mapiReceips[0], ...

стоит запомнить, что в Delphi переменная-дин.массив, переменная-объект,переменная-длин.строка - это указатели.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)