мне нужно в GUI-APP открыть консоль на rw
От: edisan  
Дата: 08.08.01 10:12
Оценка:
пробовал по всякому организовать stdin
GetStdHandle эта функция обясняется только с одним параметром в msdn|msvc5.0
трабла в том что у меня только пишет(printf), а scanf("%s", &s) не пашет :(

<------cut here------------

BOOL CreateConsole(void)
{
FreeConsole(); //на всякий случай
if ( AllocConsole() )
{
int hCrt = _open_osfhandle((long)
GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
*stdin = *(::_fdopen(hCrt, "r"));
::setvbuf(stdin, NULL, _IONBF, 0);
*stdout = *(::_fdopen(hCrt, "w"));
::setvbuf(stdout, NULL, _IONBF, 0);
*stderr = *(::_fdopen(hCrt, "w"));
::setvbuf(stderr, NULL, _IONBF, 0);
return TRUE;
}
return FALSE;
}

--------------------------->
может кто помочь?
Re: мне нужно в GUI-APP открыть консоль на rw
От: edisan  
Дата: 08.08.01 12:05
Оценка:
все я уже нашел в чем трабла: нужно было второй хендл для инпут открывать.

спасиба за внимание, хотел выговориться :)))
Re: мне нужно в GUI-APP открыть консоль на rw
От: Roman_M rgmroman.narod.ru
Дата: 08.08.01 12:06
Оценка:
Здравствуйте edisan, вы писали:

E>пробовал по всякому организовать stdin

E>GetStdHandle эта функция обясняется только с одним параметром в msdn|msvc5.0
E>трабла в том что у меня только пишет(printf), а scanf("%s", &s) не пашет :(

E><------cut here------------


E>BOOL CreateConsole(void)

E>{
E> FreeConsole(); //на всякий случай
E> if ( AllocConsole() )
E> {
E> int hCrt = _open_osfhandle((long)
E> GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
E> *stdin = *(::_fdopen(hCrt, "r"));
E> ::setvbuf(stdin, NULL, _IONBF, 0);
E> *stdout = *(::_fdopen(hCrt, "w"));
E> ::setvbuf(stdout, NULL, _IONBF, 0);
E> *stderr = *(::_fdopen(hCrt, "w"));
E> ::setvbuf(stderr, NULL, _IONBF, 0);
E> return TRUE;
E> }
E> return FALSE;
E>}

--------------------------->>
E>может кто помочь?

Наверное могу.

hCrt = _open_osfhandle((long)
GetStdHandle(STD_INPUT_HANDLE), _O_TEXT);
*stdin = *(::_fdopen(hCrt, "r"));
::setvbuf(stdin, NULL, _IONBF, 0);

hCrt = _open_osfhandle((long)
GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
*stdout = *(::_fdopen(hCrt, "w"));
::setvbuf(stdout, NULL, _IONBF, 0);

hCrt = _open_osfhandle((long)
GetStdHandle(STD_ERROR_HANDLE), _O_TEXT);
*stderr = *(::_fdopen(hCrt, "w"));
::setvbuf(stderr, NULL, _IONBF, 0);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.