Странное поведение в вызове API библиотеки (NET и C ++) - PullRequest
0 голосов
/ 13 июля 2011

У меня есть API thirt pary.Это просто потоковая передача мультимедиа на заданный ip-порт (чтение мультимедиа с устройства захвата).

Когда я использую этот API в приложении Windows Form, он работает.Но когда я вызываю этот API в консоли или в службе Windows, он не выдает никакой ошибки, но не работает [не выполняет потоковую передачу]: кажется, что он не принимает потоковые данные с устройства.

Единственная разницаМежду тем, одно приложение - это приложение Windows Form, а другое - нет. Разницы нет, кроме этого.

Какая зависимость может вызывать такие вещи?Есть идеи?

PS: API написан на C ++.Я использую этот API в NET (C ++ / CLI)

Например:

// 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 ]

1 голос
/ 13 июля 2011

Сторонний API, вероятно, внутренне зависит от диспетчеризации событий Windows, чего не будет делать консольное приложение (по-моему, по умолчанию вы можете настроить диспетчеризацию событий в консольном приложении).

0 голосов
/ 13 июля 2011

В случае UI-приложения всегда есть очередь сообщений. В консольном приложении это не так. Стороннее программное обеспечение может отправлять сообщения в очередь сообщений, которой нет в консольном приложении. Это может привести к непредсказуемому поведению программы. Попробуйте вызвать GetMessage () из win api до того, как начнется связь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...