|
Вопрос # 1 916/ вопрос открыт / |
|
Здравствуйте уважаемые экперты!
Возник вопрос :
Необходимо запустить программу с Delphi, использовал ShellAPI (ShelExecute), все работает. Однако! Если я за место прямого пути типа (C:\DIR), то все работает. Если же я пытаюсь перевести из string в PAnsiChar с помощью функции SttPCopy, вроде все работает, но после исполнения кода, вылетает ошибка EAccessViolation...
Приложение: Переключить в обычный режим- b:PAnsiChar;
- ...
- b:=StrPCopy(b,OpenDialog1.FileName); ShellExecute(Handle,'open',b,nil,nil,SW_SHOWNORMAL);
 |
Вопрос задал: WHILL (статус: Посетитель)
Вопрос отправлен: 19 сентября 2008, 13:40
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, WHILL!
Не удивительно, что ругается. Вполне мог вообще не работать или вылетать с синим экраном.
Дело в том, что копируя в переменную b строку, Вы не выделяете под неё память. И куда оно скопируется - непонятно. Всё дело случая.
Но зачем мучиться, если можно написать так
ShellExecute(Handle,'open',PAnsiChar(OpenDialog1.filename),nil,nil,SW_SHOWNORMAL);
и никаких утечек, всё компилятор сам сделает?
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 19 сентября 2008, 14:01
Оценка за ответ: 5
Комментарий к оценке: Огромное Вам спасибо, Вадим! +5 :)
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|