Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Работа с потоками


Автор: Andy_ 11.11.2004, 10:09
Так как раньше я писал только консольные приложения у меня возникла проблема при работе со своими функциями(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, но там что то мне сложно сорентироваться.

Заранее огромное пасибо за ответ.

Автор: stab 12.11.2004, 03:04
Думаю стоит покапать в сторону System.Console. Там есть методы SetError, SetIn и SetOut, которые позволяют установить на поток свой System.IO.TextReader или System.IO.TextWriter.

Добавлено @ 03:06
з.ы. в MSDN, кстати, примеры есть в топиках про SetIn, SetOut, ...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)