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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2012, 21:36   #11
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию

То есть ошибка здесь

Код:
procedure TServerForm.Timer1Timer(Sender: TObject);
var
  buffer: array [0..255] of Char;
  Win: String;
begin
  GetWindowsDirectory(buffer, SizeOf(buffer));
  win := buffer;
  Label2.Caption := win;
Мы в строку win помещаем весь массив из 255 символов, среди которых имеется строка
C:/Windows, а нужно из массива скопировать именно эти 10 символов, и уже им присваивать указатель ? Так ?
iCaesy вне форума Ответить с цитированием
Старый 25.01.2012, 21:38   #12
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию

Хотя нет, там же SizeOf...
iCaesy вне форума Ответить с цитированием
Старый 25.01.2012, 21:42   #13
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Эээ....

Как-то странно вы мыслите.

Код:
Label2.Caption := win;
В Label2 нормально выводит? Если функция выполнилась успешно (чего вы не проверяете), то - нормально выводит.

Этот кусок кода непричём. Разве он относится к передаче данных? Нет, он работает исключительно внутри одной программы.

А у вас же проблема - не в получении папки, а в передаче строк между программами.

Проблема начинается у вас с того момента, когда вы спроецировали TDataRecord, не учитывая размер передаваемых данных.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.01.2012, 21:53   #14
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию

Выводит нормально, для этого лейбл и впихнул чтобы проверять.
iCaesy вне форума Ответить с цитированием
Старый 25.01.2012, 21:54   #15
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Это был риторический вопрос.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.01.2012, 22:02   #16
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию

Память для файла как я понял выделяется здесь
Код:
 CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 50, '_SharedMem');
iCaesy вне форума Ответить с цитированием
Старый 25.01.2012, 22:08   #17
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Да, я немного неверно сказал.

CreateFileMapping выделяет, конечно, с запасом. Но этот запас ты никак не используешь. TDataRecord - всего 8 байт, не 50.

Одно из простых решений - ограничиться данными фиксированного размера вместо динамических. К примеру, использовать вместо PChar ShortString или array[0..100] of AnsiChar/WideChar.

Плюсы: это простой подход.
Минусы: не всегда возможно ограничить данные сверху.

В данном случае для папки у тебя есть ограничение в MAX_PATH - как раз влезет в 256 символов ShortString, ну а дата - и подавно (если, конечно к нам прилетят змеелюди с Альфа Центавра с их месяцами в 400 символов - тогда да, у тебя будут проблемы).

Если подход с данными фиксированного размера неприменим, то нужно использовать другие, более сложные, подходы.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.01.2012, 22:09   #18
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

(чтобы лучше это понять, я бы рекомендовал порисовать на бумажке)
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.01.2012, 22:15   #19
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 26.01.2012, 00:28   #20
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
Восклицание

Спасибо большое. Побольше бы таких людей как ты, помог, по полочкам разложил, сразу понятно стало, сделал, работает.
iCaesy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как перевести Pchar в string? green-shrek Помощь студентам 3 07.04.2010 19:01
гарантированный перевод string в PChar Пепел Феникса Общие вопросы Delphi 2 21.09.2009 11:44
String to PChar D7_beginner Общие вопросы Delphi 2 21.11.2007 14:05
проблема перевода (PChar и string) Fireleo Общие вопросы Delphi 4 29.07.2007 08:14
Как из string получить PChar??? sis Компоненты Delphi 4 11.02.2007 16:58