У меня есть DLL (Player.dll), написанная на C++, которая внутренне использует Windows GDI. Я заявление (в основном видеоплеер), записанное в Windows Forms, что внутренне вызовы API, из Player.dll
оказать фактические графики на экране, используя P/Invoke метод:Обращение к Silverlight UserControl
public class ProxyPlayer
{
[DllImport("Player.dll", CharSet=CharSet.Unicode, EntryPoint="PlayVideo")]
public static extern void Play(int playerHandle, out TWResult result);
[DllImport("Player.dll", CharSet=CharSet.Unicode, EntryPoint="PauseVideo")]
public static extern void Pause(int playerHandle);
//other methods
}
Это работает.
Но теперь я хочу написать одно приложение с помощью Silverlight 4.0. Как вы знаете, большинство Windows GDI работает с HWND
, чтобы сделать графику на экране, поэтому я передаю playerHandle
в ProxPlayer
методам, как вы можете видеть выше самостоятельно. Window Forms 'UserControl
определяет публичное свойство под названием Handle
типа IntPtr
, что эквивалентно HWND
, поэтому я передаю это ProxyPlayer
методам. Это решило мою проблему. Но у Silverlight UserControl
нет такого свойства.
Итак, мой вопрос в основном заключается в том, как я могу обращаться с моим контроллером silverlight? Потому что без него я не могу вызывать API от Player.dll
. Но я должен назвать APS. У меня нет других опций, , поскольку DLL - это настоящий движок, который буквально все связывает с , интерпретируя огромное количество данных, а затем их рендеринг. Поэтому, пожалуйста, предложите мне решение, которое соответствует моему требованию!
Примечание: Предположим, что приложение silverlight всегда будет работать в Microsoft Windows. Поэтому у меня нет проблем с выводом Windows GDI.
Пользовательские элементы Silverlight не имеют дескриптора (аналогично WPF). В случае с WPF основные окна получают один, но даже это не так в Silverlight, где контент размещается каким-либо другим приложением (либо браузером, либо sllauncher). – Jens
@Nawaz: вы когда-нибудь находили решение для своего проблема? Мне нужно будет сделать то же самое, что и вы! – Johannes
@Johannes: Нет. Я не очень много пробовал, потому что у меня была простая альтернатива: я развернул свой плеер как таковой (например, приложение winform) и попросил пользователя загрузить его, чтобы воспроизвести видеофайлы. – Nawaz