我有一个 C# Windows 应用程序,它调用 DLL 中的 C++ 函数。
这些 DLL 函数通过 printf()
和 std::cout
写入控制台。
当我运行 C# 应用程序时,我希望能够看到此输出,但我找不到实现此目的的方法。
我该怎么做?
最佳答案
我认为您有一个 .NET Forms 应用程序。如果是这样,您可以简单地为自己分配一个用于标准输出的控制台窗口。
这是一个最小的示例:
// stdout.dll
extern "C" {
__declspec(dllexport) void __cdecl HelloWorld()
{
cout << "Hello World" << endl;
}
}
将标准 handle 初始化为零,并在程序启动时分配一个新的控制台窗口。
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();
}
关于C# 从 C++ DLL 捕获输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427937/