Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ATL COM模块中打印控制台输出?_C#_C++_Atl - Fatal编程技术网

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

C# 如何在ATL COM模块中打印控制台输出?,c#,c++,atl,C#,C++,Atl,我有一个ATL exe模块,我想打印一些输出到控制台。 此模块由另一个C控制台应用程序调用,因此它应该已经有一个控制台 在ATL中: extern "C" int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR , int nShowCmd) { printf("test"); // <- this did nothing MessageBox(nullptr,

我有一个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对象,并尝试配置默认输出以使用该控制台,但我个人甚至不会尝试。也就是说,您必须弄清楚多个客户端如何提供多个控制台句柄以设置为默认值

您声明此模块由另一个C控制台应用程序调用,但是这似乎是一个单独的Windows应用程序,而不是控制台应用程序,因为您有一个_tWinMain而不是一个main entry函数。有关详细信息,请参阅。您应该能够将项目类型从Windows更改为Console,然后查看您的printf输出。@holtavolt它是独立的COM对象-因此,假设OP出于某种原因需要进程隔离,或者可能在同一环境中的多个客户端之间共享同一COM对象,将其作为EXE是可以的session@Alexei列文科夫-我看我错过了标题中提到的COM,并对你的答案投了赞成票。@Dia-如果你的目标是可以为COM服务器的开发调试目的严格添加文本,您可以考虑添加文件记录器,并在控制台窗口中运行尾部-F实用程序。或者,您可以使用OutputDebugString和DebugView实用程序,或者仅使用Visual Studio的“输出”窗口来获取类似控制台的日志记录。@holtavolt我现在使用的是日志文件。谢谢你的评论。