Странное поведение в вызове 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, чего не будет делать консольное приложение (по-моему, по умолчанию вы можете настроить диспетчеризацию событий в консольном приложении).