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

VB.net 调用自己封装起来的用VB.net做的DLL

发布时间:2020-12-16 22:41:42 所属栏目:大数据 来源:网络整理
导读:本来想用C#调用,先来用VB.net 调用一下DLL类库。当然,这个DLL也是用VB.net自己开发的,目的吗。一个是提高运行效率,一个是觉得好玩儿。 具体实现方法如下: 第一步,制作dll. 首先打开Microsoft Visual Basic .NET 。也就是那个集成开发环境。打开后选择新

本来想用C#调用,先来用VB.net 调用一下DLL类库。当然,这个DLL也是用VB.net自己开发的,目的吗。一个是提高运行效率,一个是觉得好玩儿。

具体实现方法如下:

第一步,制作dll.

首先打开Microsoft Visual Basic .NET 。也就是那个集成开发环境。打开后选择新建一个VB.net 项目。选择“类库”模版。

然后,修改一下自动生成的类的名称。比如Test.VB 然后当然是写一些代码了。

我的Test.VB 代码如下:

Imports System.IO
Imports System.Net
Imports System.Text

Public Class Data_Copyer
Public Url As String
'Public Event One_URL_Complete(ByVal Total_Rows As Integer)

' 传递进来的是一个URL地址,返回的是这个URL地址对应的HTML返回数据
Public Function GetHtmlCode(ByVal URL) As String
On Error GoTo Err_here
Dim httpReq As System.Net.HttpWebRequest
Dim httpResp As System.Net.HttpWebResponse
Dim httpURL As New System.Uri(URL)
httpReq = CType(WebRequest.Create(httpURL),HttpWebRequest)
httpReq.Method = "GET"
httpResp = CType(httpReq.GetResponse(),HttpWebResponse)
httpReq.KeepAlive = False ' 获取或设置一个值,该值指示是否与 Internet 资源建立持久连接。

Dim reader As StreamReader = _
New StreamReader(httpResp.GetResponseStream,System.Text.Encoding.GetEncoding("GB2312"))
Dim respHTML As String = reader.ReadToEnd() 'respHTML就是网页源代码
httpResp.Close()
'下面语句去掉HTML代码中的换行符号
respHTML = Replace(respHTML,Chr(10),"")
respHTML = Replace(respHTML,Chr(13),"")
Return respHTML
Exit Function
Err_here:
'MsgBox("打开URL出现错误:" & Err.Description)
Return "Null"
End Function

'从传递进来的HtmlSource 文本种,进行正则表达式ZhengZe_Str匹配,返回匹配结果,一般而言是 有用的<tr>...</tr>中间的数据
Private Function Get_ZhengZe_Resoult(ByVal HtmlSource As String)
Dim strRegex As String
strRegex = "<tr bgcolor.*?</tr>" 'ZhengZe_Str '正则表达式
Dim r As System.Text.RegularExpressions.Regex
Dim m As System.Text.RegularExpressions.MatchCollection
r = New System.Text.RegularExpressions.Regex(strRegex,System.Text.RegularExpressions.RegexOptions.IgnoreCase)
m = r.Matches(HtmlSource)
Return m
End Function


' 分析数据内容,传递进来的数据是<tr>...</tr>之间的数据。
' 把每个<td></td> 之间的数据分拆出来,并保存到数组 RowData()中。
' 这里面要分析的数据其实就是 Get_ZhengZe_Resoult 的返回值列表 m 的数据.
Private Function Get_RowData(ByVal str_HTML_RowData)
Dim RowData() As String '提取出的某一行的数据放到这个数组
Dim strRegex As String
strRegex = "<td.*?>.*?</td>" '找到所有<td>...</td>的正则表达式
Dim r As System.Text.RegularExpressions.Regex
Dim m As System.Text.RegularExpressions.MatchCollection
r = New System.Text.RegularExpressions.Regex(strRegex,System.Text.RegularExpressions.RegexOptions.IgnoreCase)
m = r.Matches(str_HTML_RowData)
Dim i As Integer
strRegex = "<[^>]*>" '去掉搜索< > 以及尖括号内容的正则表达式
ReDim RowData(m.Count - 1)
For i = 0 To m.Count - 1
RowData(i) = FormatRowData(r.Replace(m(i).Value,strRegex,""))
Next i
'下面代码是针对特殊字段处理的,这里对IC交易网的一个页面进行处理
Dim startpos As Integer
Dim strTem As String
strTem = RowData(m.Count - 1)
startpos = InStr(strTem,"_blank"">",CompareMethod.Text)
If startpos > 0 Then
strTem = Mid(strTem,startpos + 8,Len(strTem) - startpos - 7)
RowData(m.Count - 1) = strTem
End If
Return RowData
End Function

'格式化字符串,去掉特殊字符,截断超长字段。
Private Function FormatRowData(ByVal mystr As String) As String
'"insert into 抓到的数据 (品名,型号,规格,品牌,产地,单价,公司,产品分类) values ('C2012X7R1H683KT000N','EPCOS','2005','new','60','面议','&nbsp;&nbsp;深圳市万骅电子有限公司&nbsp;&nbsp;&nbsp;电话:0086-755-83667038,83667786 83667781','真空电容')"
'无用字段“ &nbsp;”
Dim newstr As String
newstr = Replace(mystr,"&nbsp;","")
newstr = Replace(newstr,"'","""") '去掉单引号
newstr = Replace(newstr,","") '去掉逗号
newstr = Trim(newstr) '去掉多余空格
FormatRowData = newstr
End Function
'得到分解字段的内容
Public Function GetResoult()
Dim RowData() As String '提取出的某一行的数据放到这个数组
Dim ReturnData(5,1) As String '将要返回的结果集合
Dim m As System.Text.RegularExpressions.MatchCollection
Dim My_URL As String
Dim Str_Temp As String

My_URL = Url
Str_Temp = GetHtmlCode(My_URL) '得到网页的源文件代码
Str_Temp = Replace(Str_Temp,"")
m = Get_ZhengZe_Resoult(Str_Temp) '得到每个<tr>..</tr>中的数据

Dim i,j As Integer
ReDim ReturnData(5,m.Count - 1)
For i = 0 To m.Count - 1
'提取结果
RowData = Get_RowData(m(i).Value) '返回结果已经放到数组 RowData() 中
'处理每一行的内容。
For j = 0 To UBound(RowData)
'Str_Temp = Str_Temp & RowData(j).ToString & ","
ReturnData(j,i) = RowData(j)
Next j
Next i
Return ReturnData
End Function


'得到分解字段的内容
Public Sub Get_File_Resoult()

Dim RowData() As String '提取出的某一行的数据放到这个数组
Dim m As System.Text.RegularExpressions.MatchCollection
Dim My_URL As String
Dim Str_Temp As String

My_URL = Url
Str_Temp = GetHtmlCode(My_URL) '得到网页的源文件代码
Str_Temp = Replace(Str_Temp,"")
m = Get_ZhengZe_Resoult(Str_Temp) '得到每个<tr>..</tr>中的数据
'Write_Log("log_file.log",My_URL)
Dim path As String
path = CurDir()
path = path & "/" & "tempdata.txt"

If File.Exists(path) Then '如果文件不存在,就创建一个
File.Delete(path)
'如果文件存在,就删除。
End If

Dim fs As FileStream = File.Create(path) '重新创建一个文件。
fs.Close()
Dim file1 As New System.IO.StreamWriter(path,True)

Dim i,j As Integer
For i = 0 To m.Count - 1
Str_Temp = ""
'提取结果
RowData = Get_RowData(m(i).Value) '返回结果已经放到数组 RowData() 中
'处理每一行的内容。
For j = 0 To UBound(RowData)
Str_Temp = Str_Temp & RowData(j).ToString & ","
Next j
Str_Temp = Mid(Str_Temp,1,Len(Str_Temp) - 1)
file1.WriteLine(Str_Temp)
Next i
file1.Close()
'RaiseEvent One_URL_Complete(m.Count) '发送消息表明成功完成一个URL页面的处理,并返回成功导入数据库的记录数.
End Sub

End Class

挺长的吧,主要是分解一个网页中的表格中的数据。把<tr><td>..</td></tr>中的数据分析出来。并放到一个2维数组里面了。

然后当然是生成Dll,了。在解决方案那里选择生成解决方案。然后到解决方案目录下面的bin目录里面拷贝出test.dll 备用。

第二步,制作一个test.aspx,另外建立一个解决方案,新建Visual Basic 项目,模版选择 ASP.net Web 应用程序。选择引用,添加引用,浏览。选择刚刚那个TEST.Dll,然后选择“确定”

然后再新建立的WebForm1.aspx 上双击,进入代码窗口。

在Private Sub Page_Load 中加入下面代码

Dim x = New Test_DLL.Data_Copyer
x.Url = "http://www.XXXXXXXXXX.asp" '这里是需要抓内容的页面
Dim bb(5,1) As String '我这里特殊项目,需要这样设置。
bb = x.GetResoult()
Dim i,j As Integer
For i = 0 To UBound(bb,2)
For j = 0 To 4
Response.Write(bb(j,i).ToString)
Next
Response.Write("<br>")
Next

运行一下就可以了。 具体情况要具体对待。我的上述代码如果不加修改,肯定是要出错的。

上面的过程是个制作的思路。

(编辑:李大同)

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

    推荐文章
      热点阅读