![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Andy_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 10.11.2004 Репутация: нет Всего: нет |
Так как раньше я писал только консольные приложения у меня возникла проблема при работе со своими функциями(dll) из GUI(.NET) приложения.
Заключается она в след.: Как в среде .NET отловить stdin поток если происходит вызов функции из dll т.е. этот поток идёт от этой dll. Например есть длл на С: #include "stdafx.h" extern "C" __declspec(dllexport) int Test(); extern "C" __declspec(dllexport) int Test() { fprintf(stdout,"Hello users!\n"); return 1; } Далее я подгружаю её в свою консольную программу на C#: using System; using System.Runtime.InteropServices; namespace LoadLib { class Class1 { [DllImport ("mydll.dll")] public static extern int Test(); static void Main(string[] args) { try { Test(); //Вызываем функц. из длл и получаем stdin на консоль } catch(System.EntryPointNotFoundException e) { Console.WriteLine(e.Message); } } } } В результате получаю на консоль вывод "Hello users!", т.е. всё ок! Вопрос: Как мне поймать этот поток в моём GUI(.NET) приложении и перевести его, например в richTextBox или в MessageBox???? Я рассматривал класс System.IO.Stream, но там что то мне сложно сорентироваться. Заранее огромное пасибо за ответ. |
|||
|
||||
| Tatarin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 5.1.2004 Где: Россия Репутация: нет Всего: нет |
Создаешь новый экземпляр класса TextReader, устанавливаешь его как новый стандартный поток ввода (через свойство SetIn). А дальше уже рулишь с этим TextReader. Попробуй так... А вообще спроси в форуме где .Net обсуждают:
http://forum.vingrad.ru/index.php?showforum=47 |
|||
|
||||
| Andy_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 10.11.2004 Репутация: нет Всего: нет |
Спасиб, попробую! :-)
|
|||
|
||||
| Andy_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 10.11.2004 Репутация: нет Всего: нет |
Пример некатит :-( Класс TextReader является абстрактным, поэтому новый экземпляр класса несоздать. Если я создаю ссылку на класс TextReader, то метода SetIn там нет. |
|||
|
||||
| Tatarin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 5.1.2004 Где: Россия Репутация: нет Всего: нет |
у TextReader есть два потомка: StreamReader и StringReader. Попробуй с каким-нибудь из них..
Метод SetIn находится в Console - ты же для него устанавливаешь новый поток ввода |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |