上下文:编程ac/c ++ win32-mfc库
如何知道我们是在控制台还是窗口应用中?
您可以通过调用win32函数GetConsoleWindow来确定当前是否有一个控制台附加到该进程.如果它返回NULL,则没有连接到该进程的控制台.但是,这不一定会告诉您是否在窗口应用程序中运行.例如,我可以有一个窗口应用程序,在启动时使用AllocConsole来为调试输出分配控制台,在这种情况下,您可以同时使用这两个控制台.我可以看到你描述的另一个问题是应用程序可能没有窗口并且没有连接控制台(例如Windows服务).
我也不得不同意litb和Martin这一点.如果你的图书馆需要知道这个,那么它可能没有足够的解耦.如果您使用它来确定发送调试输出的位置,例如最好的方法是使用cout或cerr,让使用该库的应用程序处理将流重定向到它想要的位置.