我有一个 dll 文件写入STDOUTvia std::cout.
无论如何,是否可以将 dll 的输出重定向到正在使用它的应用程序,而不必在 dll 内创建功能?例如,有没有办法“听”它的输出?
我正在寻找一个可以跨平台工作的答案。
DLL 不是一个单独的进程,而是加载到应用程序地址空间中的动态库。这意味着,当 DLL 调用 printf 或 stdout/stderr 处理程序中的任何输出时,将继承 stdout/stderr 句柄或正在运行的应用程序,并且其行为实际上与您将 printf 放入应用程序中一样。如果要捕获 DLL 调用的输出,则需要从调用 DLL 函数的代理 EXE 运行它。这样,您可以将 stdout/stderr 管道重定向到您的进程并执行您想要的任何操作。
顺便说一句,在我看来,这是一个完全错误的做法。如果您使用 DLL,则应该从其函数中获得某种返回代码,而不是在 stdout 上中继其输出。