处理Silverlight UserControl

Naw*_*waz 3 c# silverlight pinvoke winforms silverlight-4.0

我有一个用C++编写的DLL(Player.dll),内部使用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
}
Run Code Online (Sandbox Code Playgroud)

它正在发挥作用.

但是现在,我想使用Silverlight 4.0编写相同的应用程序.如您所知,大多数Windows GDI都可以HWND在屏幕上渲染图形,这就是我传递playerHandleProxPlayer方法的原因,正如您自己可以看到的那样.Window Forms' UserControl定义了一个名为Handletype 的公共属性,IntPtr它等同于HWND,所以我将它传递给ProxyPlayer方法.它解决了我的问题.但Silverlight UserControl没有任何此类财产.

所以我的问题基本上是,我如何处理我的silverlight控件?因为没有它,我无法调用API Player.dll.但我要从中呼叫APS.我没有任何其他选项,因为DLL是实际的引擎,它确实解释了大量数据然后渲染它们.所以请建议我符合我的要求的解决方案!

注意:假设我的silverlight应用程序将始终在Microsoft Windows上运行.所以我没有问题对Windows GDI进行设置.

Dar*_*rov 5

我有一个用C++编写的DLL(Player.dll),内部使用win32 API

你可以简单地忘记从Silverlight中进入这样的事情.Silverlight旨在运行跨浏览器/平台.想象一下你在MacOS下的代码.因此,请集中精力搜索可能从Silverlight运行的此代码的托管等效项,否则您只是在浪费时间.

  • @Nawaz - 您可以使用XBAP在使用WPF的浏览器中运行.我认为你希望Silverlight成为WPF,但它故意不是 - 毕竟,我们已经拥有了WPF.Silverlight应该是跨平台的(并且可以在浏览器的安全沙箱中播放等等),因此这种支持在平台中是有意无法使用的. (6认同)