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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2010, 17:17   #1
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию Не компилируются ресурсы

Вот семпл кода

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  si: Tstartupinfo;
  p : Tprocessinformation;
  t : textfile;
  bin,s : string;
begin
  Bin:= ExtractFilePath(Application.ExeName)+'BIN\';

  //Запись рц файла
  assignfile(t,bin+'files.rc');
  rewrite(t);
  writeln(t,'f1 exe file1.exe');
  writeln(t,'f2 exe file2.exe');
  closefile(t);

  //Компиляция ресурса
  FillChar( Si, SizeOf( Si ) , 0 );
  with Si do begin
  cb := SizeOf( Si);
  dwFlags := startf_UseShowWindow;
  wShowWindow := 0;
  end;
  s:=bin+'brcc32 files.rc';

  Createprocess(nil,pchar(s),nil,nil,false,Create_default_error_mode,nil,nil,si,p);
  Waitforsingleobject(p.hProcess,infinite);
  CloseHandle(p.hProcess);
  CloseHandle(p.hThread);
end;
Код не работает когда в переменной bin содержится путь вида
c:\Новая папка\папка1, видимо процедура Createprocess пытается создать процесс 'c:\Новая' так как там пробел стоит, либо проблема в русских символах. Как с этим быть?
dolphin705 вне форума Ответить с цитированием
Старый 12.08.2010, 17:19   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Кавычки.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2010, 17:21   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
так как там пробел стоит
Врядли... Сколько использую эту функцию на пробелы не жаловался.
Ты лучше выясни ошибку которую Createprocess выдает.
Код:
if Createprocess(nil,pchar(s),nil,nil,false,Create_default_error_mode,nil,nil,si,p)<>0 then RaiseLastOSError;
И почитай что за ошибка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2010, 17:37   #4
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Спасибо, код заработал если написать так

Код:
s:=' " '+bin+'brcc32" " '+bin+'files.rc" ';
dolphin705 вне форума Ответить с цитированием
Старый 12.08.2010, 17:39   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Чего-то вы пробелов лишних навставляли.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2010, 18:09   #6
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Ну пробелы естественно убрать нужно (поставил чтобы понятнее было где " и где ')

s:='"'+bin+'brcc32" "'+bin+'files.rc"';
dolphin705 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не компилируются тесты NIST slowflake Visual C++ 6 10.09.2010 19:47
Ресурсы в VC++ 6 yngwie Общие вопросы C/C++ 2 19.02.2009 23:46
Хелп!!!Многие компоненты в т.ч. DelphiX не компилируются! NNN Компоненты Delphi 4 29.04.2008 16:35
Не все готовые исходники компилируются (Вопрос новичка) grey Помощь студентам 9 28.10.2007 19:18
Ресурсы, зачем нужны ресурсы Hallo Обсуждение статей 0 12.12.2006 21:30