zuuuuk
Постоялец
Offline
|
|
« : 08-10-2010 19:16 » |
|
Доброго врмемени суток.
подскажите, как можно, используя cin<<х задать значение х не из командной строки, а из другой функции. если не сложно, то маленький пример.
второй вопрос. как отследить, какие длл использует программа. а то написал прогу. а она не без MSVS не работает. просит тамышние библиотеки. хочу эти длл собрать в одну папку, пусть кушает.
зы зарание благодарю
|
|
« Последнее редактирование: 08-10-2010 19:18 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 08-10-2010 19:26 » |
|
1) ::GetStdHandle(STD_INPUT_HANDLE) вернёт хендл потока вывода, пиши туда как в обычный файл ( ::WriteFile(...) ) 2) в студии №6 была утилита DEPENDS.EXE , которой можно глянуть нужные длл, перетащив в окно экзешник. В студии 9 я эту утилиту не нашёл почему то тут залил http://zalil.ru/29788228только она может ругнуться на отсутствие какой-либо длл, нужной для её работы. Проверишь, скажешь ) Скину
|
|
« Последнее редактирование: 09-10-2010 18:28 от Алексей1153++ »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #2 : 08-10-2010 19:29 » |
|
второй: http://www.dependencywalker.com/PS это она и есть) PPS чтобы избежать этого - используйте статическую линковку: ключи компилятора /MT вместо /MD (опции Multi-threaded вместо Multi-threaded DLL Code Generation -> Runtime Library) в противном случае - правильнее дополнять свой пакет - Redist пакетами от майкрософта а не копировать недостающие библиотеки
|
|
« Последнее редактирование: 08-10-2010 20:08 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
zuuuuk
Постоялец
Offline
|
|
« Ответ #3 : 08-10-2010 20:51 » |
|
огромное спасибо всем вам за помощ.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 09-10-2010 05:20 » |
|
в противном случае - правильнее дополнять свой пакет - Redist пакетами от майкрософта а не копировать недостающие библиотеки
а это как ?
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #5 : 09-10-2010 09:44 » |
|
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Антон (LogRus)
|
|
« Ответ #6 : 09-10-2010 12:12 » |
|
подскажите, как можно, используя cin<<х задать значение х не из командной строки, а из другой функции. если не сложно, то маленький пример.
Точнее опиши задачу, то что ты спросил это x=func();
|
|
|
Записан
|
Странно всё это....
|
|
|
zuuuuk
Постоялец
Offline
|
|
« Ответ #7 : 09-10-2010 13:08 » |
|
подскажите, как можно, используя cin<<х задать значение х не из командной строки, а из другой функции. если не сложно, то маленький пример.
Точнее опиши задачу, то что ты спросил это x=func(); я запускаю поток cin<<x он ожидает получение данных из командной строки в x. потом выполняется следующая строка. а я хочу эти данные отправить из самой программы в cin. (в п оток) а затем сам поток отправит их в х. то есть посылать данные не из командной строки а из самой программы
|
|
« Последнее редактирование: 09-10-2010 14:13 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 09-10-2010 14:21 » |
|
я запускаю поток cin<<x
это не запуск потока, это ты выводишь в поток ввода (работать не будет) , но при этом будет ожидаться ввод с клавы (сам ввод никуда не сохранится)
|
|
|
Записан
|
|
|
|
zuuuuk
Постоялец
Offline
|
|
« Ответ #9 : 09-10-2010 16:07 » |
|
прошу прощения не cin<< x; , а cin >> x; Добавлено через 4 минуты:прошу прощения не cin<< x; , а cin >> x;
и можно ли прервать ожиданиние ввода с клавиатуры и ввести свое значение из программы.
|
|
« Последнее редактирование: 09-10-2010 16:11 от zuuuuk »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 09-10-2010 16:18 » |
|
zuuuuk, прервать по таймауту что ли ? Или как ты это видишь?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #11 : 09-10-2010 16:19 » |
|
Алексей1153++, я так понимаю, он хочет, чтобы в этот поток кто-то что-то записал (точнее, сама программа себе в stdin писала).
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 09-10-2010 16:42 » |
|
дык, наверное, это невозможно (я, конечно, все тонкости не знаю)
разве что запустить дочерний процесс, который это сделает ))
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #13 : 09-10-2010 18:08 » |
|
Алексей1153++, почему невозможно? и зачем второй процесс, когда достаточно второй нити? или нет? посмотите тут может поможет. RXL упоминал что "Существуют механизмы узнать готовность IO до выполнения операции." что он имел в виду?
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 09-10-2010 18:32 » |
|
Ochkarik, нить вряд ли поможет - ведь в ДАННОМ процессе конец in-трубы запрещён на запись. Я так рассуждаю ) Разве что как-то его разрешить на запись А вот узнать готовность можно, наверное, так hIN=::GetStdHandle(STD_INTPUT_HANDLE); DWORD dwdNowInFile=0; ::PeekNamedPipe(hIN,0,0,0,&dwdNowInFile,0); if(dwdNowInFile!=INVALID_FILE_SIZE && dwdNowInFile!=0) { есть данные }
|
|
« Последнее редактирование: 09-10-2010 18:33 от Алексей1153++ »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #15 : 09-10-2010 18:53 » |
|
Алексей1153++, это не готовность... это проверка количества данных в пайпе... кстати, наверное правильнее заменить на PeekConsoleInput()хм... или это я погорячился? там еще и сообщения от мышки можно принимать? а записывать WriteConsoleInput/WriteConsoleOutput/WriteConsole/ReadConsole. я имел в виду как другой поток может узнать что первый - ждет ввода с консоли? PS он не защищен. GetStdHandle - If the function succeeds, the return value is a handle to the specified device, or a redirected handle set by a previous call to SetStdHandle. The handle has GENERIC_READ and GENERIC_WRITE access rights, unless the application has used SetStdHandle to set a standard handle with lesser access.
|
|
« Последнее редактирование: 09-10-2010 19:03 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 09-10-2010 19:03 » |
|
Алексей1153++, это не готовность... это проверка количества данных в пайпе...
я как бы это и понимаю под готовностью ) Что есть данные. вот тут не знаю, не пользовался.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #17 : 09-10-2010 19:04 » |
|
первый поток ждет ввода. второй - пытается ему подсунуть данные. вопрос: как второму - узнать что пора подсовывать?
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 09-10-2010 19:06 » |
|
второму узнавать ничего точно не надо - он всё равно периодически пытается читать ввод. Как только данные появятся, произойдёт чтение
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #19 : 09-10-2010 19:09 » |
|
ну... если только все равно, что и в какой момент вводить... а вообще задача какая то "странная")
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #20 : 09-10-2010 19:15 » |
|
а мне тоже кажется, для сей задачи нужно это x=func();
Добавлено через 1 минуту и 32 секунды:а, вот ещё вариант. Создать в программе промежуточный поток, куда перекидывать то, что читается из cin. В нужный момент туда можно записать свои данные. А вместо cin везде читать из этого промежуточного
|
|
« Последнее редактирование: 09-10-2010 19:17 от Алексей1153 »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #21 : 09-10-2010 21:03 » |
|
а зачем?) зачем передавать данные внутри одной программы через cin???
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 09-10-2010 21:57 » |
|
Ochkarik, 1) не передавать, а именно подсунуть (например, дополнить лог от прибора комментариями - у меня такой случай был) 2) ну хочется так человеку! )
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #23 : 10-10-2010 07:51 » |
|
что тут сказать...
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Антон (LogRus)
|
|
« Ответ #24 : 11-10-2010 03:24 » |
|
нихрена не понял мое понимание задачи Вариант 1: 0. хитрый способ передать данные внутри процесса 1. в одном месте делаю cout << y; 2. в другом месте делаю cin >> x; 3. всё это в рамках одного процесса
Вариант 2: 0. передать данные между процессами, тут всё просто даже кода специального писать не надо
Вариант 3: 0. Человек хочет выполнить какую-то, очень простую вещь и решил, что это удобно делать через потоки IO. Например решил преобразовать строку в число или наоборот. Ну тут тоже всё лечится.
zuuuuk, давайты расскажешь зачем такой жестокий изврат, я так понимаю никому из присутствующих тут людей столь экзотическая мысль в голову не приходила.
|
|
|
Записан
|
Странно всё это....
|
|
|
|