在从C#调用的DLL中使用std :: cout

时间:2011-05-04 12:48:28

标签: c# .net c++ dll console

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

C ++代码被编译成一个DLL,它通过P / Invoke从C#中使用。

问题是通过std :: cout从C ++ DLL打印文本不会打印任何内容。从C#打印工作正常。

我怀疑C#接管了控制台,所以C ++无法掌握它。修复可能是从C#获取控制台句柄,将其传递给C ++,并使用它将std :: cout连接到控制台窗口。但我不知道该怎么做。

有什么想法吗?

编辑:我的C ++代码不受管理。

3 个答案:

答案 0 :(得分:2)

执行cout时,

main()由C / C ++运行时连接。因此,如果C ++代码仅限于DLL,则可能没有cout要写入。 (这是过于简单化,但你明白了。)

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

答案 1 :(得分:2)

我在this SO answer找到了一个有效的解决方案。

答案 2 :(得分:0)

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