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

ввод/вывод

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

Студворк — интернет-сервис помощи студентам
Как определить откуда вызывают cout - из dll либо из исполняемого приложения?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.09.2013, 06:22
Ответы с готовыми решениями:

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

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

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

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

Не по теме:

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

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

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

Не по теме:

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


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

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

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

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

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

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

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

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

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

Добавлено через 4 минуты
Для меня важен оперативный контроль переменных, консольное окно для этого подходит.
А насчет понимания тут все просто - есть класс вывода информации (не важно какой), этот класс подключается к проекту. Вот тут как раз и хотелось бы ввести универсальность класса дополнительным методом, который бы определял откуда будет вывод - из dll или из консольного или иного приложения.
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
18.09.2013, 13:41
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
Сообщений: 140
18.09.2013, 13:59  [ТС]
Цитата Сообщение от 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
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
18.09.2013, 13:59
Я ответил на ваш вопрос, как вывести на консоль из приложения, которое не имеет консоли.
Про проверку я не понял самого вопроса. Я задал дополнительные вопросы, но вы мне ни на один вопрос не ответили.
0
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
18.09.2013, 14:10  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
Я ответил на ваш вопрос, как вывести на консоль из приложения, которое не имеет консоли.
Про проверку я не понял самого вопроса. Я задал дополнительные вопросы, но вы мне ни на один вопрос не ответили.
несколько раз писал, что мне нужна проверка и писал какая именно
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
18.09.2013, 14:14
Цитата Сообщение от gomodril Посмотреть сообщение
несколько раз писал, что мне нужна проверка и писал какая именно
Может, кто-нибудь другой понимает, что вы хотите. Я без пояснений, уж извините, не понимаю. А пояснения вы давать отказываетесь.
0
179 / 24 / 7
Регистрация: 16.05.2013
Сообщений: 181
18.09.2013, 14:27
я так понял, в приложении А - есть переменные, которые нужно контролировать в реальном времени
эти переменные можно считать( по его словам ) из Dll,
а потом через cout вывести в консоль необходимую информацию

Не по теме:

я так понял

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

Не по теме:

я так понял

Есть класс, который массивы автоматически определяет какой они размерности и выводит все через cout. Если класс использовать в консольном приложении, то консоль создается cout, если класс использовать в dll, то приходится руками писать дополнительный код. Этот код добавлен в класс дополнительными методами. Но хотелось бы, что бы класс сам определял, откуда происходит вызов - из консольного приложения или из dll, и при необходимости подключал метода по созданию консоли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2013, 14:37
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru