使用std::cout在DLL中从c#调用
本文关键字:中从 DLL 调用 std cout 使用 | 更新日期: 2023-09-27 17:54:32
我的Windows应用程序有c#部分和c++部分。c#应用程序在运行时显示一个控制台窗口。
c++代码通过p/Invoke从c#编译成一个DLL。
问题是通过std::cout从c++ DLL打印文本不会打印任何东西。
我怀疑c#已经接管了控制台,所以c++无法得到它的处理。解决方法可能是从c#中获取一个控制台句柄,将其传递给c++,并使用它将std::cout连接到控制台窗口。但是我不知道该怎么做。
任何想法?
编辑:我的c++代码托管。
cout
在main()
执行时由C/c++运行时连接。因此,如果c++代码仅限于DLL,则可能没有cout
可写入。(这是一个过度简化,但你明白的想法。)
Console.Out
为System.IO.TextWriter
。如果你的c++代码是托管的,你可以把它传递给你的DLL并写入它。但如果你通过P/Invoke调用它,我怀疑情况并非如此。也许可以使用命名管道?
基本上,c++运行时没有正确地链接到控制台,因为它应该创建控制台。有一个std::sync_with_stdio
函数应该正确链接std::cout
。