Итак, у меня есть этот SDK, предоставленный третьей стороной, который используется для просмотра потокового видео с удаленного источника.Удаленный источник запускает сервер, предоставленный третьей стороной, который захватывает и хранит видео, и я могу подключиться к этому серверу и получить видео через SDK.Я ссылаюсь на SDK через COM, и основные неграфические операции, такие как подключение к серверу, выбор видеопотока и т. Д., Работают нормально.
Проблема в том, что основной (единственный) метод для фактического показа видео впользователь, использующий этот SDK, должен передать hWnd (как int) в метод, который затем асинхронно закрасит видео в клиентскую область этого окна.«Окно» здесь, насколько мне известно, имеет значение окна GUI, которое в терминах .NET было бы любым элементом управления WinForms с дескриптором окна.В моем случае я использую элементы управления PictureBox (по одному на канал, который хочет видеть пользователь).
Проблема в том, что я, очевидно, не могу просто вставить дескриптор управляемого элемента управления PictureBox в этот метод SDK, потому что, когда я делаюпоэтому я получаю AccessViolationException от неуправляемого потока.Я работаю над примером программы, написанной на VB 6 (которая работает на моем компьютере с тестовым сервером), которая делает то же самое с VB PictureBox, и это работает просто отлично, но, очевидно, что бы ни пытался сделать SDK, чтобынаша классная безопасная песочница .NET не летает с CLR.
Помощь?Я хотел бы дать больше информации или пример кода, но я не могу предоставить что-либо достаточно продезинфицированное, чтобы это работало в общем случае, и я не могу разглашать используемый SDK.Я думаю, что мне нужно просто сказать .NET, что мой ссылочный код должен доверять тому, что он делает с окном, ИЛИ как-то перемещать окно в менее управляемое пространство памяти вне удобной песочницы моей программы.
РЕДАКТИРОВАТЬ: ОК, небольшой прогресс был достигнут.Сейчас я проверяю, что дескриптор для элемента управления был создан с помощью IsHandleCreated, прежде чем дать дескриптор метода.Однако, как сказал Ганс Пассант, IntPtr не является int.Итак, как мне поместить этот квадратный колышек в круглое отверстие?Я пробовал и функцию ToInt32 () и явное приведение к (int).Ни одна из них не работает, даже при компиляции моей библиотеки для 32-битной архитектуры.Вернусь ли я к третьей стороне и скажу, что их SDK - это POS, из-за которого я не могу пропустить указатель?