库API调用中的奇怪行为(NET和C ++)

时间:2011-07-13 15:24:47

标签: .net c++-cli

我有一个很好的API。它只是将媒体流式传输到给定的ip-port(从捕获设备读取媒体)。

当我在Windows窗体应用程序中使用该API时,它可以正常工作。但是当我在控制台或Windows服务中调用此API时,它不会给出任何错误但不起作用[不会流]:它似乎不会从设备中获取流数据。

唯一的区别是One Applications是Windows Form Application,另一个不是.. 除此之外没有什么区别。

什么样的依赖可能导致这样的事情?有什么想法吗?

PS:API是用C ++编写的。我在NET(C ++ / CLI)中使用该API

例如:

// Works in Windows Form Application

System::Void startButton_Click(System::Object^  sender, System::EventArgs^  e) 
{

    MyAPI->Start();
}
System::Void stopButton_Click(System::Object^  sender, System::EventArgs^  e) 
{
    MyAPI->Stop();
}

但......

// Not Work In Console or Windows Service

 MyAPI->Start();

 Console::WriteLine("Streaming started.Press enter to exit");
 Console::Read();

 MyAPI->Stop();

Console::WriteLine("Streaming stopped");

2 个答案:

答案 0 :(得分:1)

第三方API可能在内部依赖于Windows事件调度,控制台应用程序不会这样做(默认情况下,我相信您可以在控制台应用程序中设置事件调度)。

答案 1 :(得分:0)

如果是UI应用程序,总会有一个消息队列。在控制台应用程序中,不是。第三方软件可能会将消息发布到控制台应用程序中不存在的消息队列中。这样做可能会导致不可预测的程序行为。尝试在通信开始之前从win api调用GetMessage()。