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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2011, 23:34   #11
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Действительно, не исчерпан.
Проблема с PChar в CreateProcess и String'овым значение appInfo.ExeFile?
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2011, 00:08   #12
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ещё раз: CreateProcess и PChar не при чём.

Проблема в строке ExeFile. Программа валится на получении её длины, о чём и говорит стек MadExcept.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.02.2011, 12:12   #13
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Почитал ваши статьи, нашёл много полезного ля себя, полагаю это:
Цитата:
Сообщение от GunSmoker blog
Если текст изменяется, то он будет скопирован в другое место, а адрес в переменной соответствующим образом изменится. Это означает, что вы не должны использовать PChar для указания на строки, а затем изменять строку. Лучше всего избегать таких вещей:

Код:
// ПРЕДУПРЕЖДЕНИЕ: ПЛОХОЙ ПРИМЕР
var
  S: string;
  P: PChar;
begin
  S := ParamStr(0); // например, нам вернули 'C:\Test.exe';
  P := PChar(S);
  S := 'Something else';
Если S изменяется на 'Something else', указатель P не будет изменён и будет продолжать указывать на 'C:\Test.exe'. Поскольку P не является строковой (в смысле String) ссылкой на этот текст, и у нас нет никакой другой переменной, ссылающейся на него, то его счётчик ссылок станет равным 0, и текст будет удалён из памяти. Это означает, что P теперь указывает на недоступную память (invalid memory).
это мой случай?



Сейчас у меня все выглядит так:
Код:
type
  {класс информации о программе
  Сюда заносятся данные о каждой программе...}
  TAppInfo = record
    {...}
    FileExe: string; // Полный путь до ехе
    RunParams: string; // Параметры запуска
    {...}
  end;
  PAppInfo = ^TAppInfo;
Значит мне надо указать длинну строки?
Код:
type
  {класс информации о программе
  Сюда заносятся данные о каждой программе...}
  TAppInfo = record
    {...}
    FileExe: string[255]; // Полный путь до ехе
    RunParams: string; // Параметры запуска
    {...}
  end;
  PAppInfo = ^TAppInfo;
Но ведь длинна может быть разной! И больше 255 знаков.

И ещё вопрос к знающему человеку, подозреваю что передаётся пустая строка, это не есть хорошо.
Но как проверить это?

Как стандартными методами отладки заглянуть и прросмотреть все переменные и их значения которые передаются в CreateProcess а также посмотреть значения переменных в передоваемой структуре record?

Последний раз редактировалось Человек_Борща; 01.02.2011 в 14:44.
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2011, 17:47   #14
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
это мой случай?
Откуда я знаю, я вашего кода не вижу.

Самое простое, что здесь можно сделать - включить отладочный режим в менеджере памяти.

Цитата:
Значит мне надо указать длинну строки?
И с чего ты это взял?

Цитата:
И ещё вопрос к знающему человеку, подозреваю что передаётся пустая строка, это не есть хорошо.
Но как проверить это?

Как стандартными методами отладки заглянуть и прросмотреть все переменные и их значения которые передаются в CreateProcess а также посмотреть значения переменных в передоваемой структуре record?
Учиться пользоваться отладчиком.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Extractfilepath ttjke Помощь студентам 1 29.04.2010 19:20
Что за EAccessViolation? Anekdot Общие вопросы Delphi 12 03.08.2009 14:38
Еще раз о EAccessViolation. Andre1723 Общие вопросы Delphi 12 23.02.2009 01:39
ExtractFilePath subsonic Общие вопросы Delphi 6 24.01.2008 20:02
Ошибка EAccessViolation num8er Общие вопросы Delphi 6 10.10.2007 08:00