Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
1

ввод/вывод

15.09.2013, 06:22. Показов 1795. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как определить откуда вызывают cout - из dll либо из исполняемого приложения?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2013, 06:22
Ответы с готовыми решениями:

Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод
Добрый день! Помогите, пожалуйста, с программой. Программа считывает строку с клавиатуры и...

Поменять консольный ввод-вывод на файловый ввод-вывод
вот у меня калькулятор как мне сделать что б числа вводились из файла и результат записывался в...

Запись выражений, ввод–вывод информацииЗапись выражений, ввод–вывод информации
Задача 2.1. Пользуясь только операцией умножения, вычислить (A в 7-ой степени) за четыре операции....

Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур
Добрый вечер)) У меня небольшой вопрос. Почему первые буквы (в названии книг) не выводит на экран?...

23
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
18.09.2013, 08:05  [ТС] 2
может все таки есть мысли по этому поводу? хотя бы алгоритм какой нить.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
18.09.2013, 08:48 3
Цитата Сообщение от gomodril Посмотреть сообщение
может все таки есть мысли по этому поводу? хотя бы алгоритм какой нить.
мб просто подключить dll и попробовать вызвать cout, если не вызовется то значит не из dll, а если вызовется то значит из dll. Да хз как определить, и вообще какая разница откуда вызывать?
0
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
18.09.2013, 09:18  [ТС] 4
Разница есть, нужно в классе автоматически подключать метод создания консоли в случае если вызов идет из dll, если вызов идет из приложения, то создавать самому консоль не нужно т.к. она создается методом cout.
0
Нету имени
18.09.2013, 11:07
  #5

Не по теме:

cout - вы как пример взяли, так как
может фигню напишу, но мне так всегда казалось

Цитата Сообщение от gomodril Посмотреть сообщение
Как определить откуда вызывают cout
cout - не вызвают, она сама, в потоке, ставит вывод символов на печать
а сами символы печатаются другой, помоему из WinAPI функции

0
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
18.09.2013, 11:54  [ТС] 6
Цитата Сообщение от Нету имени Посмотреть сообщение

Не по теме:

cout - вы как пример взяли, так как
может фигню напишу, но мне так всегда казалось


cout - не вызвают, она сама, в потоке, ставит вывод символов на печать
а сами символы печатаются другой, помоему из WinAPI функции

А разве я написал, что cout вызывают? Попробуйте в функции dll написать
C++
1
cout << "test";
И потом сделайте вызов этой функции, консольное окно не создастся. Для этого один из способов использовать AllocConsole(). А вот если в исполняемом приложении в функции написать
C++
1
cout << "test";
то консольное окно будет создано и в него пойдет вывод созданного потока методом cout.
Вот мне как раз и нужен алгоритм определения откуда происходит вызов.
0
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,817
Записей в блоге: 4
18.09.2013, 12:17 7
Цитата Сообщение от gomodril Посмотреть сообщение
то консольное окно будет создано и в него пойдет вывод созданного потока методом cout.
У меня почему-то так не происходит. (VS 2008). Если приложение консольное, то консоль создается операционной системой. Если нет - то попытка вывода на cout ни к чему не приводит. По крайней мере консольного окна я не вижу, а вижу обычное окно GUI-приложения.

Добавлено через 10 минут
Цитата Сообщение от gomodril Посмотреть сообщение
Вот мне как раз и нужен алгоритм определения откуда происходит вызов.
Непонятно, куда вы собираетесь вставлять код, реализующий этот алгоритм. Единственное логически приемлемое место это библиотечные программы вывода на cout. Но если так, то по вашим словам в этих программах уже существует такая проверка. Почему бы ею не воспользоваться?
0
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
18.09.2013, 12:30  [ТС] 8
Цитата Сообщение от palva Посмотреть сообщение
У меня почему-то так не происходит. (VS 2008). Если приложение консольное, то консоль создается операционной системой. Если нет - то попытка вывода на cout ни к чему не приводит. По крайней мере консольного окна я не вижу, а вижу обычное окно GUI-приложения.

Добавлено через 10 минут

Непонятно, куда вы собираетесь вставлять код, реализующий этот алгоритм. Единственное логически приемлемое место это библиотечные программы вывода на cout. Но если так, то по вашим словам в этих программах уже существует такая проверка. Почему бы ею не воспользоваться?
Вот и я про это говорю, что если создаете dll, то cout ни чего на консоль не выведет пока не создадите консоль сами, я создаю при вызове из dll консольное окно AllocConsole.
А в каких библиотеках есть подобная проверка? Мне например нужно контролировать определенные переменные создаваемые в стороннем приложении (не на С++), из него могу сделать вызов функции из dll, в dll соответственно пришлось написать код выводящий в консоль необходимую информацию по другому я эти переменные меняющиеся в реальном режиме времени увидеть не смогу. Еще можно сделать вывод через WindowsForm, но это для меня пока сложно. А через GUI это ведь MessageBox? Если так, то это неудобно, ведь на каждую итерацию вызова будет создаваться свой MessageBox.
0
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,817
Записей в блоге: 4
18.09.2013, 12:46 9
Вы не ответили на мои вопросы, а задали кучу новых, вызывающих такое же недоумение.
Цитата Сообщение от gomodril Посмотреть сообщение
если создаете dll, то cout ни чего на консоль не выведет пока не создадите консоль сами
Это не так. Выведет, если приложение консольное. Запросит консоль у приложения и выведет на нее.
Цитата Сообщение от gomodril Посмотреть сообщение
А в каких библиотеках есть подобная проверка?
Это у вас надо спросить. Вы только что утверждали, что такая проверка есть. То есть при попытке вывода на cout программа вывода проверяет, откуда произведен вывод и в зависимости от этого создает или не создает консоль. Или я вас не так понял?
Цитата Сообщение от gomodril Посмотреть сообщение
в dll соответственно пришлось написать код выводящий в консоль
Я в таких случаях выводил в файл и одновременно читал этот файл при помощи FAR. Никаких конфликтов не происходило. В крайнем случае можно прочитать этот файл после окончания работы программы блокнотом и проанализировать.

Добавлено через 4 минуты
Теперь я не понимаю, для чего вам эта проверка, если вам уже удалось вывести трассировку на консоль, созданную при помощи AllocConsole.
0
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
18.09.2013, 13:06  [ТС] 10
Цитата Сообщение от palva Посмотреть сообщение
Вы не ответили на мои вопросы, а задали кучу новых, вызывающих такое же недоумение.

Это не так. Выведет, если приложение консольное. Запросит консоль у приложения и выведет на нее.
Это у вас надо спросить. Вы только что утверждали, что такая проверка есть. То есть при попытке вывода на cout программа вывода проверяет, откуда произведен вывод и в зависимости от этого создает или не создает консоль. Или я вас не так понял?

Я в таких случаях выводил в файл и одновременно читал этот файл при помощи FAR. Никаких конфликтов не происходило. В крайнем случае можно прочитать этот файл после окончания работы программы блокнотом и проанализировать.

Добавлено через 4 минуты
Теперь я не понимаю, для чего вам эта проверка, если вам уже удалось вывести трассировку на консоль, созданную при помощи AllocConsole.
Не путайте меня я не говорил, что у меня проверка такая есть, мне как раз она и нужно. И вообще я не знаю как можно создать консольную dll, если знаете, то поделитесь опытом...

Добавлено через 4 минуты
Для меня важен оперативный контроль переменных, консольное окно для этого подходит.
А насчет понимания тут все просто - есть класс вывода информации (не важно какой), этот класс подключается к проекту. Вот тут как раз и хотелось бы ввести универсальность класса дополнительным методом, который бы определял откуда будет вывод - из dll или из консольного или иного приложения.
0
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,817
Записей в блоге: 4
18.09.2013, 13:41 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <io.h>
#include <fcntl.h>
#include <iostream>
using namespace std;
...
        AllocConsole();
        int  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);
        *stderr = *(::_fdopen(hCrt, "w"));
        ::setvbuf(stderr, NULL, _IONBF, 0);
 
        cout << "test";
1
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
18.09.2013, 13:59  [ТС] 12
Цитата Сообщение от palva Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <io.h>
#include <fcntl.h>
#include <iostream>
using namespace std;
...
        AllocConsole();
        int  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);
        *stderr = *(::_fdopen(hCrt, "w"));
        ::setvbuf(stderr, NULL, _IONBF, 0);
 
        cout << "test";
У меня самого нечто подобное а где проверка? И кстати там не хватает еще после завершения всего цикла операций FreeConsole()

Добавлено через 6 минут
У меня все выглядит примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// dllmain.cpp: определяет точку входа для приложения DLL.
#include "stdafx.h"
 
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
    {
    HANDLE hOut=0;
    if(hOut==0)
        {
        AllocConsole();
        FILE *hOut = _fdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),2 /* _O_TEXT */),"w");
        *stdout = *stderr = *hOut;
        }
    if(hOut!=0)
        {
        FreeConsole();
        hOut = 0;
        }
    switch (ul_reason_for_call)
        {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
        }
    return TRUE;
    }
0
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,817
Записей в блоге: 4
18.09.2013, 13:59 13
Я ответил на ваш вопрос, как вывести на консоль из приложения, которое не имеет консоли.
Про проверку я не понял самого вопроса. Я задал дополнительные вопросы, но вы мне ни на один вопрос не ответили.
0
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
18.09.2013, 14:10  [ТС] 14
Цитата Сообщение от palva Посмотреть сообщение
Я ответил на ваш вопрос, как вывести на консоль из приложения, которое не имеет консоли.
Про проверку я не понял самого вопроса. Я задал дополнительные вопросы, но вы мне ни на один вопрос не ответили.
несколько раз писал, что мне нужна проверка и писал какая именно
0
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,817
Записей в блоге: 4
18.09.2013, 14:14 15
Цитата Сообщение от gomodril Посмотреть сообщение
несколько раз писал, что мне нужна проверка и писал какая именно
Может, кто-нибудь другой понимает, что вы хотите. Я без пояснений, уж извините, не понимаю. А пояснения вы давать отказываетесь.
0
179 / 24 / 7
Регистрация: 16.05.2013
Сообщений: 181
18.09.2013, 14:27 16
я так понял, в приложении А - есть переменные, которые нужно контролировать в реальном времени
эти переменные можно считать( по его словам ) из Dll,
а потом через cout вывести в консоль необходимую информацию

Не по теме:

я так понял

0
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,817
Записей в блоге: 4
18.09.2013, 14:30 17
Нету имени, Тогда у него нет проблем. Он создает консоль, как я написал, и выводит.
Ему нужна некая проверка, которую он хочет поместить непонятно куда.
0
179 / 24 / 7
Регистрация: 16.05.2013
Сообщений: 181
18.09.2013, 14:31 18
и ещё забыл добавить, что он хочет сделать метод, который бы определял, куда будет вывод этих данных ( по его словам ) в Dll, из консоли, или иного приложения
0
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,817
Записей в блоге: 4
18.09.2013, 14:36 19
Цитата Сообщение от Нету имени Посмотреть сообщение
куда будет вывод этих данных ( по его словам ) в Dll, из консоли, или иного приложения
Вас я тоже не понимаю. Я дебил. Это точно. Ухожу за пивом.
1
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
18.09.2013, 14:37  [ТС] 20
Цитата Сообщение от Нету имени Посмотреть сообщение
я так понял, в приложении А - есть переменные, которые нужно контролировать в реальном времени
эти переменные можно считать( по его словам ) из Dll,
а потом через cout вывести в консоль необходимую информацию

Не по теме:

я так понял

Есть класс, который массивы автоматически определяет какой они размерности и выводит все через cout. Если класс использовать в консольном приложении, то консоль создается cout, если класс использовать в dll, то приходится руками писать дополнительный код. Этот код добавлен в класс дополнительными методами. Но хотелось бы, что бы класс сам определял, откуда происходит вызов - из консольного приложения или из dll, и при необходимости подключал метода по созданию консоли.
0
18.09.2013, 14:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2013, 14:37
Помогаю со студенческими работами здесь

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод)
Как сделать чтобы список студентов выводился на экран в конце? #include&lt;iostream&gt; ...

Поиск в массиве структур по заданному полю и вывод в алфавитном порядке (файловый ввод/вывод)
Помогите с функцией void runFile() что бы с файла брал и выводил в алфавитном порядке список...

Вывод суммы в файл (файловый ввод/вывод)
Добрый день! Я пытался написать программу, которая должна вводить данные из файла №1, потом...

Ввод n-значного числа, вывод цифр, из которых оно состоит и вывод суммы его цифр
Написать программу, осуществляющую ввод n-значного числа, вывод цифр, из которых оно состоит и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru