Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 132
#1

ввод/вывод - C++

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

Как определить откуда вызывают cout - из dll либо из исполняемого приложения?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 06:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ввод/вывод (C++):

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

Поменять консольный ввод-вывод на файловый ввод-вывод - C++
вот у меня калькулятор как мне сделать что б числа вводились из файла и результат записывался в новый файл ? // ОБРАТНАЯ...

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

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

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод) - C++
Как сделать чтобы список студентов выводился на экран в конце? #include<iostream> #include<stdio.h> #include<stdlib.h> ...

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

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

Не по теме:

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

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

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

Не по теме:

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


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

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

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

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

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

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

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

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

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

Добавлено через 4 минуты
Для меня важен оперативный контроль переменных, консольное окно для этого подходит.
А насчет понимания тут все просто - есть класс вывода информации (не важно какой), этот класс подключается к проекту. Вот тут как раз и хотелось бы ввести универсальность класса дополнительным методом, который бы определял откуда будет вывод - из dll или из консольного или иного приложения.
0
palva
2648 / 1875 / 274
Регистрация: 08.06.2007
Сообщений: 7,193
Записей в блоге: 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
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 132
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
palva
2648 / 1875 / 274
Регистрация: 08.06.2007
Сообщений: 7,193
Записей в блоге: 4
18.09.2013, 13:59 #13
Я ответил на ваш вопрос, как вывести на консоль из приложения, которое не имеет консоли.
Про проверку я не понял самого вопроса. Я задал дополнительные вопросы, но вы мне ни на один вопрос не ответили.
0
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 132
18.09.2013, 14:10  [ТС] #14
Цитата Сообщение от palva Посмотреть сообщение
Я ответил на ваш вопрос, как вывести на консоль из приложения, которое не имеет консоли.
Про проверку я не понял самого вопроса. Я задал дополнительные вопросы, но вы мне ни на один вопрос не ответили.
несколько раз писал, что мне нужна проверка и писал какая именно
0
palva
2648 / 1875 / 274
Регистрация: 08.06.2007
Сообщений: 7,193
Записей в блоге: 4
18.09.2013, 14:14 #15
Цитата Сообщение от gomodril Посмотреть сообщение
несколько раз писал, что мне нужна проверка и писал какая именно
Может, кто-нибудь другой понимает, что вы хотите. Я без пояснений, уж извините, не понимаю. А пояснения вы давать отказываетесь.
0
18.09.2013, 14:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2013, 14:14
Привет! Вот еще темы с ответами:

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

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

ВВОД-ВЫВОД!!!! - C++
Неправльно! Вообще ничего не выводит..... Структура «абонент телефонной сети» содержит следующие поля: 1) фамилия (строка), 2) улица,...

Ввод/вывод в MS VS - C++
Здравствуйте! У меня похожая проблема ... только у меня Вижуал С++ (русская версия) ... - только-только установила ... При...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru