Странное поведение в вызове API библиотеки (NET и C++)

У меня есть 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 ответа

Решение

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

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

Другие вопросы по тегам