如何在 ATL COM 模块中打印控制台输出?

How to print console output in ATL COM module?

我有一个 ATL exe 模块,我想将它的一些输出打印到控制台。 此模块由另一个 C# 控制台应用程序调用,因此它应该已经有一个控制台。

在 ATL 中:

extern "C" int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR , int nShowCmd)
{
    printf("test");                                   // <- this did nothing
    MessageBox(nullptr, L"test", L"caption", MB_OK);  // <- this work
    //...
}

EXE COM 服务器将自行启动,而不是附加到调用者的控制台 - 它甚至可能已经被一些以前的客户端启动,甚至可能不是控制台应用程序。

如果您需要将输出发送到呼叫者的控制台,您最好只向呼叫者发送 return 文本。

或许可以将调用者的控制台句柄作为方法参数传递给 COM 对象,并尝试配置默认输出以使用该控制台,但我个人不会尝试。 IE。您必须弄清楚多个客户端如何提供多个控制台句柄以设置为默认...