Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.004 c
2-1318237920
NBAH1990
2011-10-10 13:12
2012.01.22
Программная настройка подключения по локальной сети


15-1317627402
OW
2011-10-03 11:36
2012.01.22
Задумка. Игра Пираты. Интересно ли будет?


15-1318064119
turbouser
2011-10-08 12:55
2012.01.22
Прелести XE2


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


3-1270028409
ocean
2010-03-31 13:40
2012.01.22
Как затащить tab-delimited текстовый файл в БД?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский