草庐IT

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

这个问题在这里已经有了答案:Redirectingcouttoaconsoleinwindows(11个答案)关闭3年前。我的Windows应用程序有一个C#部分和一个C++部分。C#应用在运行时会显示一个控制台窗口。C++代码被编译成DLL,通过P/Invoke从C#使用。问题是通过std::cout从C++DLL打印文本不会打印任何内容。从C#打印工作正常。我怀疑C#已经接管了控制台,因此C++无法处理它。解决方法可能是从C#获取控制台句柄,将其传递给C++,然后使用它将std::cout连接到控制台窗口。但我不知道该怎么做。有什么想法吗?编辑:我的C++代码是非托管的。

c++ - 检测 `cout` 是否输出到正确接受颜色的终端?

除了isatty之外,还有其他方法可以知道cout是否输出到正确接受颜色的终端吗?我正在使用thisheader对于颜色,我已经在使用if(isatty(1))来了解输出是否为goestoaterminal.不幸的是,当我将颜色输出到Xcode的控制台时,我得到了未转义的序列-但是当从Terminal.app或OSX中的iTerm执行应用程序本身时它工作正常。我想Xcode的控制台将自己标识为终端但仍然忽略颜色序列...所以我希望有更好的检测-如果可能的话。我的代码本身很简单,像这样,如果isatty为真,则返回一个彩色字符串,然后转到cout:std::stringSlot::des

c++ - 在 MPI 中对 cout 的 "atomic"调用

我感兴趣的是OpenMPI中是否有命令或技术来进行原子调用以写入stdout(或者就此而言,任何流)。我注意到,在MPI程序的执行过程中,写入cout(或其他流)的调用可能会变得困惑,因为每个proc都可能在到达特定代码段时写入。报告结果时,一行可以被多个proc写入,混淆了问题。所以2个不同的过程可能会做这样的事情://Proc10-resultscalculatedsomewhereabove//result1=10//result2=11cout和://Proc20-resultscalculatedsomewhereabove//result1=20//result2=21co

C++ streamsize prec = cout.precision(3) - 它是如何工作的?

我是使用C++的新手。我有一个快速的问题,可能是一个愚蠢的问题。streamsizeprec=cout.precision(3);据我正确理解,此声明的工作方式如下:将cout精度设置为3,但将先前的精度值分配给prec。此外,简单地说,我们可以将函数结果(例如数学加法函数)分配给变量:intz=addition(3,4);在第二个中,它进行计算并将结果分配给变量z,而不是先前的值或默认值。我的理解正确吗?它们之间有什么区别? 最佳答案 一个函数返回什么值完全取决于那个特定的函数。大多数函数只是返回其操作的结果。标准库流中的状态设置

c++ - 交替的 cin/cout 很慢?

开始,我正在做std::ios_base::sync_with_stdio(false).我有以下代码片段,从文本文件(output.txt)中读取一百万个整数:inttests;cin>>tests;for(inti=0;i>number;cout和inttests;cin>>tests;vectornumbers(tests);for(inti=0;i>numbers[i];}for(inti=0;i当然,实际上他们所做的不仅仅是打印相同的数字。问题是,第一个block花费了大约4倍的时间(6.2秒对1.8秒)。用printf重写相同的代码/scanf两种情况都需要3秒。这背后的原

c++ - 在 C++ 中使用 cout 在打印输出中进行绝对定位?

如何使用cout获得“绝对定位”的列,即左对齐文本和右对齐数字?#include#includeusingnamespacestd;structHuman{charname[20];charname2[20];charname3[20];doublepts;};intmain(){inti;HumanmyHumen[3]={{"Mr","Alan","Turing",12.25},{"Ms","Ada","Lovelace",15.25},{"Sir","EdgarAllan","Poe",45.25}};cout 最佳答案 您使用

c++ - stringstream.rdbuf 导致 cout 失败

当我在某个时候添加一个cout时,我很惊讶地发现我的程序突然安静下来,所以我隔离了负责的代码:std::stringstreamdata;data程序在没有最后命令的情况下悄悄退出。到底是怎么回事?如果我将最后一个.rdbuf()改为.str()然后它就会完成。 最佳答案 在调用std::cout期间,std::cout无法从data读取任何字符的filebuf因为读取的位置在上一次输出后已经在文件末尾;accordingly,这组failbit在std::cout,并且在清除此状态之前,任何进一步的输出也将失败(即您的最后一行基本

c++ - 流 cout 设置标志 std::ios_base::skipws 有什么原因吗?

cout默认设置了标志std::ios_base::skipws和std::ios_base::dec您可以使用代码验证这一点:#include#includeusingnamespacestd;intmain(){ios_base::fmtflagsflags=cout.flags();stringsflags;if(flags&ios_base::skipws)sflags+="skipws";if(flags&ios_base::unitbuf)sflags+=sflags.empty()?"unitbuf":"unitbuf";if(flags&ios_base::upperc

c++ - 十进制值:cout << dec << boost::this_thread::get_id()

是否可以用十进制或八进制格式计算thread::id?std::cout我总是得到十六进制,例如0xdf08。 最佳答案 您应该能够使用标准I/O操纵器指定您想要的输出格式:#include//...std::cout但是,请注意thread::id不需要是数字。此外,它可能是一个数字,但可能以不同于将该数字插入std::cout的方式打印到标准输出。.C++11标准规范operator的重载接受std::thread::id(我假设它的行为类似于Boost对boost::thread::it的对应重载),说:[...]Insert

c++ - 如何将 std::cout 重定向到 UITextView?

我正在向iOS应用程序添加C++代码,我想使用UITextView作为一种方式来显示正在通过std::cout进行的操作。我不想过多地修改C++代码。到目前为止,我已经定义了一个名为stdcout的字符串流,在我对捕获输出感兴趣的C++代码范围内,我正在C++block返回后更新UITextView。这有点麻烦,因为我需要进行一些手动文本替换,而且很容易出错。有更好的方法吗? 最佳答案 你可以看看rdbuf()。如果您关心性能/灵active,您可以编写自定义流缓冲区并实现溢出成员,以便获得“自动”“实时”更新。这里是一个简单的例子