c# – 处理Silverlight UserControl
我有一个用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服务器,等等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |