Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.22;
Скачать: CL | DM;

Вниз

GUI & Console   Найти похожие ветки 

 
uinor   (2009-09-24 22:09) [0]

Понимаю, что наркоманство, но требуется реализовать оба режима (GUI & Console) в одной программе, при этом основным режимом является GUI, но в случае, если есть параметры командной строки, то выводим все в консоль.

Своя консоль - это легко. Требуется сделать вывод в родительскую.

Реализовал следующим образом (понимаю, что минимум Windows XP):
var
 ConsoleOutput: Boolean;
 AttachConsole: function(dwProcessId: Cardinal): Boolean; stdcall;

procedure WriteConsole(const AOutputStr: string);
begin
 if WriteLog then
   WriteLn(AOutputStr)
 else
   ... skipped ...
end;

begin
 if (ParamCount > 0) then
 begin
   // Пробуем наладить консоль
   ConsoleOutput := False;
   AttachConsole := GetProcAddress(GetModuleHandle("kernel32.dll"), "AttachConsole");
   if (@AttachConsole <> nil) then
     ConsoleOutput := AttachConsole($FFFFFFFF);

   WriteLog("Console Mode!");
 end else
 begin
   Application.Initialize;
   Application.MainFormOnTaskbar := True;
   Application.Title := "Requte";
   Application.CreateForm(TfrmMain, frmMain);
   Application.Run;
 end;
end.


Все нормально. Но есть небольшая проблема - когда мы выполняем cmd myApp.exe >myApp.log получаем i/o exception на WriteLn.

Интуитивно, я понимаю, что надо решать как-то иначе, уж слишком в лоб решение. Подскажите?


 
uinor   (2009-09-24 22:10) [1]

procedure WriteLog(const AOutputStr: string);
begin
if (ConsoleOutput) then
  WriteLn(AOutputStr)
else
  ... skipped ...
end;


Поправочка. Приношу свои извинения, код правил прямо здесь.


 
Leonid Troyanovsky ©   (2009-09-25 08:06) [2]


> uinor   (24.09.09 22:09)  

> Все нормально. Но есть небольшая проблема - когда мы выполняем
> cmd myApp.exe >myApp.log получаем i/o exception на WriteLn

Похоже на косяк by M$.

> Интуитивно, я понимаю, что надо решать как-то иначе

Правильно понимаешь.
Ничего лучше, чем написать два приложения не придумали.
И МС так делает.

В крайнем случае 3: - сервер и 2 клиента.

--
Regards, LVT.


 
uinor   (2009-09-25 08:17) [3]

@Leonid Troyanovsky
Целиком с вами согласен.



Страницы: 1 вся ветка

Текущий архив: 2012.01.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.01 c
2-1317987675
igorium
2011-10-07 15:41
2012.01.22
Вопрос про Canvas.CopyRect и фактическую ширину формы.


15-1318001461
Leon-Z
2011-10-07 19:31
2012.01.22
MySQL &amp; ODBC ???


6-1250005013
NeonSimfi
2009-08-11 19:36
2012.01.22
Получить найстройки прокси изпользуя WinHttpGetProxyForUrl


2-1318357787
Очень злой
2011-10-11 22:29
2012.01.22
Что такое object и как с ним работать?


2-1317559190
lesstab
2011-10-02 16:39
2012.01.22
Групповое редактирование выбранных строк в ДБГриде