如何在 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。您必须弄清楚多个客户端如何提供多个控制台句柄以设置为默认...
我有一个 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。您必须弄清楚多个客户端如何提供多个控制台句柄以设置为默认...