我的Windows应用程序有一个C#部分和一个C ++部分。 C#应用程序在运行时会显示一个控制台窗口。
C ++代码被编译成一个DLL,它通过P / Invoke从C#中使用。
问题是通过std :: cout从C ++ DLL打印文本不会打印任何内容。从C#打印工作正常。
我怀疑C#接管了控制台,所以C ++无法掌握它。修复可能是从C#获取控制台句柄,将其传递给C ++,并使用它将std :: cout连接到控制台窗口。但我不知道该怎么做。
有什么想法吗?
编辑:我的C ++代码不受管理。
答案 0 :(得分:2)
cout
时, main()
由C / C ++运行时连接。因此,如果C ++代码仅限于DLL,则可能没有cout
要写入。 (这是过于简单化,但你明白了。)
Console.Out
是System.IO.TextWriter
。如果您的C ++代码是托管的,您可以将其传递给您的DLL并写入它。但如果你通过P / Invoke调用它,我怀疑情况并非如此。也许使用命名管道?
答案 1 :(得分:2)
我在this SO answer找到了一个有效的解决方案。
答案 2 :(得分:0)
基本上,C ++运行时没有正确链接到控制台,因为它应该创建它。有一个std::sync_with_stdio
函数可以正确链接std::cout
。