VB.NET关于接口

来源:互联网 发布:淘宝买快排被查 编辑:程序博客网 时间:2024/05/14 10:40

因为作为一个硬件工程师,编程只是业余爱好,所以对接口一直比较陌生,概念陌生,使用上陌生,也怕伤脑筋,所以一直没有深入去了解。

最近因为想写一个可以自定义下载控制的webbrowser,要用到比较多的接口去实现,而网上又少有VB.NET关于接口方面的资料(应该说我自己没有找到而已),自己又比较笨,一直未能解决。

于是决定要学学接口。


这里《对接口的理解》有句说得很好:“一个类实现了某个接口,就相当于声明我能够完成某项工作。” 顿时对接口这个概念有了较为清晰的了解。

《VB.NET 接口的作用----本人现阶段的理解 》  使我对接口又有进一步的了解。


webbrowser中要用到com接口,使用方法举例如下:

1、COM接口声明

<ComImport(), Guid("00000118-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _
Public Interface IOleClientSite
    Sub SaveObject()
    Sub GetMoniker(ByVal dwAssign As UInteger, ByVal dwWhichMoniker As UInteger, ByVal ppmk As Object)
    Sub GetContainer(ByVal ppContainer As Object)
    Sub ShowObject()
    Sub OnShowWindow(ByVal fShow As Boolean)
    Sub RequestNewObjectLayout()
End Interface


‘其中Guid("00000118-0000-0000-C000-000000000046")为IOleClientSite的GUID(全局唯一标识符)(见我的另一篇转载《GUID和UUID、CLSID、IID 区别及联系 》及《与WebBrowser相关的GUID值的定义》)

2、接口的实现

Public Class Form1
    Implements IOleClientSite     ‘实现接口,参加《实现现有接口http://msdn.microsoft.com/zh-cn/library/cc438080(v=vs.71).aspx》

'并且要实现接口的所有方法

Public Sub GetContainer(ByVal ppContainer As Object) Implements IOleClientSite.GetContainer
        ppContainer = Me
    End Sub
    Public Sub GetMoniker(ByVal dwAssign As UInteger, ByVal dwWhichMoniker As UInteger, ByVal ppmk As Object) Implements IOleClientSite.GetMoniker
    End Sub
    Public Sub OnShowWindow(ByVal fShow As Boolean) Implements IOleClientSite.OnShowWindow
    End Sub
    Public Sub RequestNewObjectLayout() Implements IOleClientSite.RequestNewObjectLayout
    End Sub
    Public Sub SaveObject() Implements IOleClientSite.SaveObject
    End Sub
    Public Sub ShowObject() Implements IOleClientSite.ShowObject
    End Sub

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


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小学生不好好写作业怎么办 带的家教成绩没有提高怎么办 学生出国学校成绩证明怎么办 学生成绩考差了班主任怎么办 高一的学生成绩跟不上怎么办 综合素质评价手册丢了怎么办 小学综合素质评价手册丢了怎么办 人体质不出汗差怎么办 儿子一年级语文成绩太差怎么办 小孩读一年级差几个月怎么办 小孩一年级下学期数学差怎么办 小学五年成绩差怎么办 生完孩子记忆力不好怎么办 生了孩子之后记忆力不好怎么办 孩子记忆力差学习不好怎么办 党课结业证丢了怎么办 对三年级不听话的学生应该怎么办 素质报告单丢了怎么办 社保小红本丢了怎么办 小红本丢了怎么办 孩子小红本丢了怎么办 小学素质报告册丢了怎么办 小学生素质报告册丢了怎么办 高中素质报告册丢了怎么办 小升初素质报告单丢了怎么办? 三供一业移交后社区管理职能怎么办 初中政治总考不好怎么办 孩子上初一学习越来越差怎么办 胸经过整容后变得胸闷怎么办? 网瘾高中不学习怎么办 犯罪人逃到美国怎么办 10岁儿童偏胖怎么办 土地面积与实际面积不符怎么办 军转进省直单位双选失败怎么办 房改房楼龄到了70年怎么办 商品房房改房到70年后怎么办 公务员未享受房改政策怎么办 两套房改房违规怎么办 法院保全的物品在我家怎么办 西瓜视频答题结束了钱没提现怎么办 诚信答题密码忘了怎么办