Дескриптор Silverlight UserControl - PullRequest
       9

Дескриптор Silverlight UserControl

3 голосов
/ 20 января 2011

У меня есть DLL (Player.dll), написанная на C ++, для внутреннего использования Windows GDI .У меня есть приложение (в основном, видеоплеер), написанное на Windows Forms, которое внутренне вызывает API из Player.dll для визуализации фактической графики на экране, используя технику p / invoke:

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.Поэтому у меня нет проблем с привязкой GDI к Windows.

Ответы [ 2 ]

5 голосов
/ 20 января 2011

У меня есть DLL (Player.dll), написанная на C ++, которая внутренне использует win32 API

Вы можете просто забыть о PInvoking в Silverlight. Silverlight был предназначен для запуска кросс-браузер / платформа. Итак, представьте свой код под MacOS. Поэтому сконцентрируйте свою энергию на поиске управляемого эквивалента этого кода, который может работать из Silverlight, или вы просто теряете время.

2 голосов
/ 20 января 2011

Если вы можете представить свою собственную DLL-библиотеку как COM-сервер, который реализует IDispatch, вы можете получить к нему доступ из Silverlight (через класс AutomationFactory), если вы находитесь в доверенном приложении вне браузера в Windows.

Я все еще рекомендую (согласно моему комментарию к ответу Дарина), чтобы вы внимательно посмотрели на платформу, поскольку ваш пример «PlayVideo» / «PauseVideo» предполагает, что вы пытаетесь сделать то, что платформа, вероятно, уже может сделать - и лучшетем не менее, платформа может делать это на MacOS и в браузере, без уродства написания собственного COM-сервера и т. д.

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