加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 处理Silverlight UserControl

发布时间:2020-12-16 01:40:37 所属栏目:百科 来源:网络整理
导读:我有一个用C编写的DLL(Player.dll),内部使用 Windows GDI.我有一个用Windows Forms编写的应用程序(基本上是一个视频播放器),内部调用来自Player.dll的API来渲染屏幕上的实际图形,使用p / invoke技术: public class ProxyPlayer{ [DllImport("Player.dll",Ch
我有一个用C编写的DLL(Player.dll),内部使用 Windows GDI.我有一个用Windows Forms编写的应用程序(基本上是一个视频播放器),内部调用来自Player.dll的API来渲染屏幕上的实际图形,使用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",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控件?因为没有它,我无法从Player.dll调用API.但我要从中呼叫APS.我没有任何其他选项,因为DLL是实际的引擎,它确实解释了大量数据然后渲染它们.所以请建议我符合我的要求的解决方案!

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

解决方法

如果您可以将本机DLL公开为实现IDispatch的COM服务器,则可以从Silverlight(通过AutomationFactory类)访问该DLL,如果您在Windows上的浏览器外可信应用程序中.

我仍然建议(根据我对Darin的回答)你好好看看平台,因为你的“PlayVideo”/“PauseVideo”示例表明你正试图做平台可能已经做过的事情 – 更好的是,平台可以在MacOS和浏览器中完成,而且不会编写自己的COM服务器,等等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读