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

ввод/вывод

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

Не по теме:

я так понял

0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
18.09.2013, 14:30
Нету имени, Тогда у него нет проблем. Он создает консоль, как я написал, и выводит.
Ему нужна некая проверка, которую он хочет поместить непонятно куда.
0
179 / 24 / 7
Регистрация: 16.05.2013
Сообщений: 181
18.09.2013, 14:31
и ещё забыл добавить, что он хочет сделать метод, который бы определял, куда будет вывод этих данных ( по его словам ) в Dll, из консоли, или иного приложения
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
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
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru