使用std::cout在DLL中从c#调用

Using std::cout in DLL called from C#

本文关键字:中从 DLL 调用 std cout 使用      更新时间:2023-10-16

我的Windows应用程序有c#部分和c++部分。c#应用程序在运行时显示一个控制台窗口。

c++代码通过p/Invoke从c#编译成一个DLL。

问题是通过std::cout从c++ DLL打印文本不会打印任何东西。

我怀疑c#已经接管了控制台,所以c++无法得到它的处理。解决方法可能是从c#中获取一个控制台句柄,将其传递给c++,并使用它将std::cout连接到控制台窗口。但是我不知道该怎么做。

任何想法?

编辑:

我的c++代码托管。

coutmain()执行时由C/c++运行时连接。因此,如果c++代码仅限于DLL,则可能没有cout可写入。(这是一个过度简化,但你明白的想法。)

Console.OutSystem.IO.TextWriter。如果你的c++代码是托管的,你可以把它传递给你的DLL并写入它。但如果你通过P/Invoke调用它,我怀疑情况并非如此。也许可以使用命名管道?

基本上,c++运行时没有正确地链接到控制台,因为它应该创建控制台。有一个std::sync_with_stdio函数应该正确链接std::cout