我有一个 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 服务器将自行启动,而不是连接到调用方的控制台 - 它甚至可能已经被某些以前的客户端启动,甚至可能不是控制台应用程序。
如果您需要将输出发送到呼叫者的控制台,则最好将文本返回给呼叫者。
可以将调用方的控制台句柄作为方法参数传递给 COM 对象,并尝试配置默认输出以使用该控制台,但我个人甚至不会尝试。 即您必须弄清楚多个客户端如何提供多个控制台句柄以设置为默认值......