在从C调用的DLL中使用std::cout# 我的Windows应用程序有一个C部分和一个C++部分。C#应用程序运行时会显示一个控制台窗口 < > C++代码编译成DLL,通过P/UnjKE使用C语言。 问题是,通过STD::CUT从C++ DLL打印文本不打印任何东西。从C#打印效果很好 我怀疑C++已经接管了控制台,所以C++无法得到它的句柄。修复方法可能是从C语言获得控制台句柄,传递给C++,并使用它连接STD::CUT到控制台窗口。但我不知道该怎么做

在从C调用的DLL中使用std::cout# 我的Windows应用程序有一个C部分和一个C++部分。C#应用程序运行时会显示一个控制台窗口 < > C++代码编译成DLL,通过P/UnjKE使用C语言。 问题是,通过STD::CUT从C++ DLL打印文本不打印任何东西。从C#打印效果很好 我怀疑C++已经接管了控制台,所以C++无法得到它的句柄。修复方法可能是从C语言获得控制台句柄,传递给C++,并使用它连接STD::CUT到控制台窗口。但我不知道该怎么做,c#,.net,c++,dll,console,C#,.net,C++,Dll,Console,有什么想法吗 > >编辑:我的C++代码是非托管的。 >代码>代码> cOUT/C++ >在代码>主())/代码>执行时由C/C++运行时连接。因此,如果C++代码限于DLL,则可能没有 cOUT/COD>写入。(这是一个过于简单化的想法,但你明白了。) Console.Out是一个System.IO.TextWriter。如果管理C++代码,可以将其传递给DLL并写入它。但如果你是通过P/Invoke调用它,我怀疑情况并非如此。也许使用命名管道?基本上,C++运行时没有正确地与控制台连接,因

有什么想法吗


<> > >编辑:我的C++代码是非托管的。 >代码>代码> cOUT/C++ >在代码>主())/代码>执行时由C/C++运行时连接。因此,如果C++代码限于DLL,则可能没有<代码> cOUT/COD>写入。(这是一个过于简单化的想法,但你明白了。)


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

基本上,C++运行时没有正确地与控制台连接,因为它应该创建控制台。有一个<代码> STDIOS.STIDIO < /C>函数,应该正确地链接<代码> STD::CUT< /COD> .< /P>在C++中,如果您打开一个文件(用于写)命名为“CON”,然后写入它,它是否起作用?@编码器,加文:正确的文件名是“COUNUT $”,请参见SycIsOffyStdio(IOSKASE中的静态函数)没有帮助。当C++运行库初始化时,它也会被连接起来,这也会发生在DLL中。