C # захватить вывод из C ++ DLL - PullRequest
0 голосов
/ 17 октября 2019

У меня есть приложение на C # для Windows, которое выполняет вызовы функций C ++ в DLL. Эти функции DLL записывают в консоль через printf() и std::cout.

Когда я запускаю свое приложение C #, я хотел бы видеть этот вывод, но я не могу найти способ добиться этого.

Как я могу это сделать?

1 Ответ

0 голосов
/ 31 октября 2019

Я считаю, что у вас есть приложение .NET Forms. Если это так, вы можете просто выделить себе консольное окно, которое используется для стандартного вывода.

Вот минимальный пример:

// stdout.dll
extern "C" {
  __declspec(dllexport) void __cdecl HelloWorld()
  {
    cout << "Hello World" << endl;
  }
}

Инициализируйте стандартные гендели в ноль и выделите новое консольное окно в программезапуск.

static class Program
{
    [DllImport("kernel32.dll")]
    public static extern bool SetStdHandle(int stdHandle, IntPtr handle);
    [DllImport("kernel32.dll")]
    public static extern bool AllocConsole();
    [DllImport("stdout.dll")]
    extern public static void HelloWorld();

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        SetStdHandle(-10, IntPtr.Zero); // stdin
        SetStdHandle(-11, IntPtr.Zero); // stdou
        SetStdHandle(-12, IntPtr.Zero); // stderr
        AllocConsole();
        /* ... */
    }
 }

В потоке программы вызовите функцию extern:

private void btnHelloWorld_Click(object sender, EventArgs e)
{
    Program.HelloWorld();
}

Hello World Console Window

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...