先看DLL
在vb.net中生成dll与在vb中是一样的,也要建立一个类:
新建项目—〉Visual Basic—〉类库—〉确定
然后通过生成(build)命令来产生一个dll。一般保存在bin目录下,同时在此目录下还生成了一个.pdb(debug information)和一个.tlb(type livary)文件;另外还生成了一个obj目录,它包含了编译器和VisualStudio 使用的临时文件。
用vb6.0写
的dll,经过vb.net升级重新编译,会生成多个dll;VB
.NET的DLL,都是无需注册的,因为vb.net里DLL不是COM组件,引用就可以用了
在vb.net中生成一个dll文件,但在VB中、调用这个DLL文件时显示没有找到函数的入口点,可能的原因:
1 需要.NET的框架支持才能使用
2 vb.net生成的dll不是那种可以Declare ... 的函数库,而是一种类库。就像Common Controls那种,可以引入,然后就会出现很多新控件的那种。当然,不一定是可视的控件,也可以是一般的类。
3 跟COM组件很相似,但是不是同一个东西。
vb.net的dll是基于.net平台的,机制不一样。但是使用起来的方法是一样的。
4 把dll加入到工程中去以后,比如是test.dll,你要用test.dll中的一个类class2的public函数qq时,您应该先
将类引用到实例,再进行调用,比如:
dim cqq as test.class2
cqq.qq(...)
有关命名空间(namespace)
有人说:一个
.net的dll其实就是一个命名空间。
其实,命名空间是一个独立的概念,主要是用于避免命名冲突,是定义和管理类别的范畴。一个namespace是类和组件的逻辑组合,其目的在于将.NET class按类别定义。微软借用了C++ class packaging概念:namespace来描述这种组合。.NET Framework中的组件被称为集合(assembly)。全部.NET代码在数百个库文件(DLL)中定义。Namespace把assembly中定义的类组织起来。一个namespace可以包括多个assembly,一个assembly也可以在多个namespace中定义。
在.NET中,代码被编译为中间语言(Intermediate Language,IL),assembly中存储了IL代码、元数据和其它资源文件。同一个assembly可以附属于一个或多个Exe/DLL。所有的.NET库都存储在assembly中。
NameSpace的专门定义语句为:
Namespace MyNameSpaceName
Class XXX
End Class
End Namespace
这时候 XXX 就属于 MyNameSpaceName 里面了,VB描述为:MyNameSpaceName.XXX
一个工程会有一个默认的命名空间根,你可以在工程的属性窗口里面看到这个属性。通常命名空间根的名称就是这个工程的名字,但是如果改了的话就不是这个工程的名字了。如果说这个工程就是Test.vbproj并且没有改过,那么上面的那个Class2就属于Test,或者说Test.Class2。
因此,不能够说一个dll就是一个命名空间,这么说不严谨。
建浏览器
VB.NET和C#一样也没有只属于自己的类库,他们使用的类库都是.Net FrameWork SDK,在此类库中封装许多类,VB.NET就是通过这些类来突破自身语言的限制,实现很多强大功能的。其实对于.Net的编程语言来说,使用VB.NET来编写程序或者使用C#编程已经没有像以前使用VB和C++之间,有那么大的区别了,因为一般来说只要用C#能够实现的功能,同样用VB.NET也可以实现,有时使用VB.NET还显得更为方便。
虽然.Net FrameWork SDK的内容十分丰富,功能也十分强大,但有些功能使用此类库来实现就显得有点麻烦,因为在Windows里面拥有许多COM组件,充分利用这些已经存在的资源,对于快速开发程序就显得非常重要了。本文就来介绍一下,VB.NET使用COM组件来做一个属于自己的浏览器。
一. VB.NET和COM组件: (COM组件在.net中调用原理)
首先要澄清一个概念,就是VB.NET和C#一样,不能直接使用已经存在的COM组件,因为编译VB.NET和C#文件的时候,必须保证编译时候所使用的文件是受管代码(Managed Code)文件,我们知道VB.NET和C#所使用的.Net FrameWork SDK都是受管代码,而对于那些COM组件来说,他们都是非受管代码(Unmanaged Code),所以这些COM组件要能够被VB.NET和C#使用,必须实现自身从非受管代码到受管代码的转换。好在,在.Net框架中提供了一个程序来专门实现这种转换,这个文件就是"Aximp.exe",如果你把.Net FrameWork SDK安装在"C"盘,那么在"C:\Program Files\Microsoft.NET\FrameworkSDK\Bin"目录中,就可以找到这个文件。 (我看过了,确实存在的)
如果要实现vb.net与诸如COM的非受管代码之间的交互,.net FrameWork SDK提供了一个COM Interop 技术,要想让COM Interop工作,CLR-公共语言运行时需要所有COM类型的原数据,这就意味着原来在类型库里存储的COM类型需要转化成.net原数据才行,这可以通过SDK自带的Importer utility (tlbimp.exe)来实现,完成转化后,COM类型的例子就可以无缝的集成到.net中来了。
二. COM组件的转换:
在本文中所使用的COM组件的名称是微软的Web浏览器,如果你选用的操作系统是2000,并且安装的路径是"C:\Winnt",那么这个组件可以在"C:\Winnt\System32"目录中找到;如果你选用的操作系统是98,并且安装的路径是"C:\Windows",那么这个组件可以在"C:\Windows\System"目录中找到,这个COM组件的名称为"shdocvw.dll"。"Aximp.exe"是一个功能比较强大的程序,你可以通过"Aximp /?"命令,来了解他的一些其他的常规使用方法,由于在本文中只是最为简单的使用方法,所以使用下列简单的命令就可成功转换:
Aximp c:\winnt\system32\shdocvw.dll
运行上述命令后就可以实现转换,并在当前目录中产生"SHDocVw.dll"和"AxSHDocVw.dll"二个文件。
在成功转换过以后,就要利用转换后的这二个文件,用VB.NET来做一个属于自己的浏览器。
八. 总结:
用VB.NET做浏览器的过程其实也就是用VB.NET进行COM组件编程的过程,在本文中,按照COM组件的转换,COM组件的使用的步骤一步步的说明。虽然随着Visual Sduio .Net正式版的推出,我们在以后的编程中使用的平台更多的倾向于他,但由于Visual Sduio .Net在实际的操作过程中掩盖了许多的底层的操作,这其实对我们更深入的掌握.Net程序开发是不利的,这也就是本文为什么一开始没有直接从Visual Sduio .Net编程开始。其实对一个高手来说,.Net方面的编程,用什么工具都是次要的,关键是要掌握其中的来龙去脉.
三. 本文程序设计和运行的软件环境:
(1).微软公司视窗2000服务器版
(2)..Net FrameWork SDK Beta 2
四. 程序设计的思路以及关键步骤的解决方法:
(1).在VB.NET中使用浏览器组件:
在转换而成的"AxSHDocVw.dll"和"SHDocVw.dll"中定义了命名空间"AxSHDocVw",在此命名空间中封装了一个"AxWebBrowser"组件,这个组件中有若干个方法和属性,VB.NET就是通过这些方法和属性来实现浏览器的一些基本功能的。使用此浏览器组件和使用其他的WinForm组件的过程是一样的,首先要导入命名空间,然后在程序中继承此命名空间中定义的浏览器组件,最后设定这个继承后的组件的属性和方法。具体如下:
< I > .导入命名空间,具体代码如下:
Imports AxSHDocVw
< II > . 继承此命名空间中定义的浏览器组件,具体代码如下:
Friend WithEvents AxWebBrowser1 As AxSHDocVw.AxWebBrowser
(2).VB.NET实现浏览器的一些基本功能:
要用VB.NET做一个属于自己的浏览器的,就必须掌握用VB.NET是如何实现浏览器的一些基本功能的,我们所讲的浏览器的基本功能其实也就是浏览器工具栏上的那些功能按钮,譬如:前进、后退、主页、停止等,其中浏览器中最为重要,也是比较难实现的,就是如何在给定网址后,通过"转到"按钮,浏览指定的网页,下面就来具体介绍一下。
< I > .浏览指定网页:
在下列的代码中我们是通过TextBox1文本框组件来放置指定的网址的,"Button1"按钮组件就是定义的"转到"按钮,下列就是用VB.NET实现浏览指定网页的程序代码:
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
Dim nullObject As System.Object = 0
Dim str As String = ""
Dim nullObjStr As System.Object = str
Cursor.Current = Cursors.WaitCursor
AxWebBrowser1.Navigate ( TextBox1.Text , nullObject , nullObjStr , nullObjStr , nullObjStr )
Cursor.Current = Cursors.Default
End Sub
< II > .VB.NET实现浏览器的基本功能:
在本文的程序中,我们也是仿照IE浏览器的大致式样,同样设定了一个工具栏(ToolBar1),并且在工具栏中放置了一些按钮(ToolBarButton1至ToolBarButton5),通过这些按钮来实现浏览器的前进、后退等基本功能,下列是实现这些功能的代码:
Private Sub ToolBar1_ButtonClick ( ByVal sender As System.Object , ByVal e As ToolBarButtonClickEventArgs ) Handles ToolBar1.ButtonClick
'实现浏览器中的"后退"功能
If e.Button Is ToolBarButton1 Then
AxWebBrowser1.GoBack ( )
End If
'实现浏览器中的"前进"功能
If e.Button Is ToolBarButton2 Then
AxWebBrowser1.GoForward ( )
End If
'实现浏览器中的"主页"功能
If e.Button Is ToolBarButton3 Then
AxWebBrowser1.GoHome ( )
End If
'实现浏览器中的"刷新"功能
If e.Button Is ToolBarButton4 Then
AxWebBrowser1.Refresh ( )
End If
'实现浏览器中的"停止"功能
If e.Button Is ToolBarButton5 Then
AxWebBrowser1.Stop ( )
End If
End Sub
< III > .其实掌握了上面的这些知识,一个基本的浏览器的框架大致也就出来了,但由于浏览器页面大小是经常变化,如果你不设定窗体中的组件是跟随窗体大小变化而随之变化的话,这个做出来浏览器也就显得不那么专业,所以下面这些画龙点睛的代码也是不可缺少的。下面代码的作用是使得浏览界面上的组件随着窗体的变化而变化,即窗体中按钮和文本框等要随着窗体的变化而变化。
'定位"地址"文本框组件与窗体的下、左、右边框保持一致
TextBox1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _
Or AnchorStyles.Left ) _
Or AnchorStyles.Right ) '定位"转到"按钮组件与窗体的上、右边框保持一致
Button1.Anchor = ( AnchorStyles.Top Or AnchorStyles.Right )
'定位"浏览器"组件与窗体的上、下、左、右边框保持一致
AxWebBrowser1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _
Or AnchorStyles.Left ) _
Or AnchorStyles.Right )
五. 用VB.NET做浏览器的源程序代码(IE.vb):
在了解了上面的这些要点后,可以得到用VB.NET做浏览器的完整代码,具体如下:
Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports AxSHDocVw
'导入程序中使用到的命名空间
Public Class Form1
Inherits Form
Public Sub New ( )
MyBase.New ( )
'初始化窗体中的各个组件
InitializeComponent ( )
End Sub
'清除程序中使用的各种资源
Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )
If disposing Then
If Not ( components Is Nothing ) Then
components.Dispose ( )
End If
End If
MyBase.Dispose ( disposing )
End Sub
Friend WithEvents ToolBar1 As ToolBar
Friend WithEvents ToolBarButton1 As ToolBarButton
Friend WithEvents ToolBarButton2 As ToolBarButton
Friend WithEvents ToolBarButton3 As ToolBarButton
Friend WithEvents ToolBarButton4 As ToolBarButton
Friend WithEvents ToolBarButton5 As ToolBarButton
Friend WithEvents Label1 As Label
Friend WithEvents TextBox1 As TextBox
Friend WithEvents Button1 As Button
Friend WithEvents AxWebBrowser1 As AxSHDocVw.AxWebBrowser
Private components As System.ComponentModel.Container
Private Sub InitializeComponent ( )
TextBox1 = New TextBox ( )
ToolBarButton1 = New ToolBarButton ( )
ToolBarButton2 = New ToolBarButton ( )
ToolBarButton3 = New ToolBarButton ( )
ToolBarButton4 = New ToolBarButton ( )
ToolBarButton5 = New ToolBarButton ( )
Label1 = New Label ( )
ToolBar1 = New ToolBar ( )
Button1 = New Button ( )
AxWebBrowser1 = New AxSHDocVw.AxWebBrowser ( )
CType ( AxWebBrowser1 , System.ComponentModel.ISupportInitialize ).BeginInit ( )
SuspendLayout ( )
'定位"地址"文本框组件与窗体的下、左、右边框保持一致
TextBox1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _
Or AnchorStyles.Left ) _
Or AnchorStyles.Right )
TextBox1.Location = New Point ( 48 , 40 )
TextBox1.Name = "TextBox1"
TextBox1.Size = New Size ( 296 , 21 )
TextBox1.TabIndex = 2
TextBox1.Text = ""
ToolBarButton1.Text = "向后"
ToolBarButton3.Text = "主页"
ToolBarButton2.Text = "向前"
ToolBarButton4.Text = "刷新"
ToolBarButton5.Text = "停止"
Label1.Location = New Point ( 8 , 48 )
Label1.Name = "Label1"
Label1.Size = New Size ( 48 , 23 )
Label1.TabIndex = 1
Label1.Text = "地址:"
'以下是在工具栏中加入按钮
ToolBar1.Buttons.Add ( ToolBarButton1 )
ToolBar1.Buttons.Add ( ToolBarButton2 )
ToolBar1.Buttons.Add ( ToolBarButton3 )
ToolBar1.Buttons.Add ( ToolBarButton4 )
ToolBar1.Buttons.Add ( ToolBarButton5 )
ToolBar1.DropDownArrows = True
ToolBar1.Name = "ToolBar1"
ToolBar1.ShowToolTips = True
ToolBar1.Size = New Size ( 400 , 38 )
ToolBar1.TabIndex = 0
'定位"转到"按钮组件与窗体的上、右边框保持一致
Button1.Anchor = ( AnchorStyles.Top Or AnchorStyles.Right )
Button1.Location = New Point ( 352 , 40 )
Button1.Name = "Button1"
Button1.Size = New Size ( 40 , 23 )
Button1.TabIndex = 3
Button1.Text = "转到"
'定位"浏览器"组件与窗体的上、下、左、右边框保持一致
AxWebBrowser1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _
Or AnchorStyles.Left ) _
Or AnchorStyles.Right )
AxWebBrowser1.Enabled = True
AxWebBrowser1.Location = New Point ( 0 , 64 )
AxWebBrowser1.Size = New Size ( 400 , 240 )
AxWebBrowser1.TabIndex = 4
Me.AutoScaleBaseSize = New Size ( 6 , 14 )
Me.ClientSize = New Size ( 400 , 301 )
'在窗体上加入组件
Me.Controls.Add ( AxWebBrowser1 )
Me.Controls.Add ( Button1 )
Me.Controls.Add ( TextBox1 )
Me.Controls.Add ( Label1 )
Me.Controls.Add ( ToolBar1 )
Me.Name = "Form1"
Me.Text = "VB.NET做个性化浏览器"
CType ( Me.AxWebBrowser1 , System.ComponentModel.ISupportInitialize ).EndInit ( )
Me.ResumeLayout ( False )
End Sub
'实现浏览器的功能
Private Sub ToolBar1_ButtonClick ( ByVal sender As System.Object , ByVal e As ToolBarButtonClickEventArgs ) Handles ToolBar1.ButtonClick
'实现浏览器中的"后退"功能
If e.Button Is ToolBarButton1 Then
AxWebBrowser1.GoBack ( )
End If
'实现浏览器中的"前进"功能
If e.Button Is ToolBarButton2 Then
AxWebBrowser1.GoForward ( )
End If
'实现浏览器中的"主页"功能
If e.Button Is ToolBarButton3 Then
AxWebBrowser1.GoHome ( )
End If
'实现浏览器中的"刷新"功能
If e.Button Is ToolBarButton4 Then
AxWebBrowser1.Refresh ( )
End If
'实现浏览器中的"停止"功能
If e.Button Is ToolBarButton5 Then
AxWebBrowser1.Stop ( )
End If
End Sub
'实现"转到"按钮功能
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
Dim nullObject As System.Object = 0
Dim str As String = ""
Dim nullObjStr As System.Object = str
Cursor.Current = Cursors.WaitCursor
AxWebBrowser1.Navigate ( TextBox1.Text , nullObject , nullObjStr , nullObjStr , nullObjStr )
Cursor.Current = Cursors.Default
End Sub
End Class
Module Module1
Sub Main ( )
Application.Run ( new Form1 ( ) )
End sub
End Module
六. 编译命令和运行界面:
在经过如下命令编译后,就可以得到可以自己的浏览器了
vbc /t:winexe /r:AxSHDocVw.dll /r:SHDocVw.dll /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll ie.cs
七. Visual Stduio .Net的实现方法:
随着Visual Stduio .Net的正式版的推出,很多程序员都已经开始使用。其实用Visual Stduio .Net来实现上面的这些步骤,就显得非常的容易,因为上面的很多步骤,在Visual Stduio .Net中都被掩盖了起来,也就是说很多步骤都让Visual Stduio .Net给你在不知不觉中做出来了。譬如COM组件的转换,在你选择新建了一个项目后,按动工具栏,点击右键,选择"自定义工具栏",
选择"Microsoft Web 浏览器",你就会发现在Windows窗体的工具栏上面多了一个新的组件,这个组件就是Visual Stdio .Net给你转换好的可以在VB.NET中使用的浏览器组件。此时你就可以在新建的窗体上面加入此组件,这时Visual Stdio .Net就给你完成了COM组件的转换,并且也为你创建一个浏览器的组件。此时就可以根据上文中介绍的要点来实现浏览器的一些基本功能,具体的实现方法和上面的完全一样,这里就不详细介绍了。 发表于 @ 2006年11月29日 16:05:00|评论(loading...)|编辑