VB.NET关于接口
?
因为作为一个硬件工程师,编程只是业余爱好,所以对接口一直比较陌生,概念陌生,使用上陌生,也怕伤脑筋,所以一直没有深入去了解。 最近因为想写一个可以自定义下载控制的webbrowser,要用到比较多的接口去实现,而网上又少有VB.NET关于接口方面的资料(应该说我自己没有找到而已),自己又比较笨,一直未能解决。 于是决定要学学接口。
这里《对接口的理解》有句说得很好:“一个类实现了某个接口,就相当于声明我能够完成某项工作。” 顿时对接口这个概念有了较为清晰的了解。 《VB.NET 接口的作用----本人现阶段的理解 》 使我对接口又有进一步的了解。
webbrowser中要用到com接口,使用方法举例如下: 1、COM接口声明 <ComImport(),Guid("00000118-0000-0000-C000-000000000046"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _
‘其中Guid("00000118-0000-0000-C000-000000000046")为IOleClientSite的GUID(全局唯一标识符)(见我的另一篇转载《GUID和UUID、CLSID、IID 区别及联系 》及《与WebBrowser相关的GUID值的定义》) 2、接口的实现 Public Class Form1 '并且要实现接口的所有方法 Public Sub GetContainer(ByVal ppContainer As Object) Implements IOleClientSite.GetContainer End Class 3、另一个VB.NET实现COM接口的例子:《Extra WebBrowser Events PART 2 http://www.vbib.be/index.php?/tutorials/article/242-extra-webbrowser-events-part-2/》??
4、又如要使用urlmon.dll的Ibindstatuscallback,是不能通过引用??urlmon.dll来实现的,这个帖子里说了原因:
如何引用urlmon.dll http://bbs.csdn.net/topics/310245868
5、明白是明白了不少,不过如何对接口进行声明,在VB.NET来说,还是个麻烦的事情,因为接口涉及到的参数不是那么容易从C转换到VB。
??
6、接口简单来说就是用来传递数据,可以传入,也可以传出:
IOleClientSite.GetContainer :传出 (
http://msdn.microsoft.com/en-us/library/windows/desktop/ms688620(v=vs.85).aspx)
HRESULT GetContainer(
[out]IOleContainer **ppContainer );
IOleClientSite.OnShowWindow :传入(
http://msdn.microsoft.com/en-us/library/windows/desktop/ms688658(v=vs.85).aspx)
HRESULT OnShowWindow(
[ in]BOOL fShow );
7、实现
:就是在 接口方法或函数里,针对相应的数据进行处理(或者自己感兴趣的数据),不感兴趣的,可以不作处理。
8、要实现接口,首先是要获得接口,只是简单一句:Implements IOleClientSite并不能获得Top-Level 的接口,也就无从着手。
例如还需要:
Dim ocAs IOleObject =DirectCast(Me.ExtendedWebBrowser1.ActiveXInstance,IOleObject)
oc.SetClientSite(DirectCast(Me,IOleClientSite)) Public Sub GetContainer(ByVal ppContainerAsObject) Implements IOleClientSite.GetContainer ppContainer = Me End Sub
可以参考MSDN(MSDN还是十分强大的,网上找到的代码,很多都能在MSDN找到根据):
INFO: Accessing the Object Model from Within an ActiveX Control
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/enu_kbie_dev/ie_dev/172763.htm
大家也可以看看这里:
如何: 在ActiveX 控件中获得顶层 IWebBrowser2 接口:http://blog.csdn.net/shybt/article/details/6125215
??
??
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |