100分求教把vb程序修改成动态连接库的问题

knet 2004-09-06 06:52:32
原来有一个vb程序,大概是这样写的:
Imports BASP21Lib
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim basptest As New Basp21
Dim test As String
Dim sendadd As String
Dim resvAdd As String
sendadd = Trim(TextBox1.Text)
resvAdd = Trim(TextBox2.Text)
test = basptest.SendMail("192.168.1.19", sendadd, _
resvAdd, "test for send Mail", _
"this is a test for send mail", "")
basptest = Nothing
End Sub
End Class
其中BASP21Lib 是个已经起了发信作用的动态链接库,在上面的程序中调用test = basptest.SendMail("192.168.1.19", sendadd, _
resvAdd, "test for send Mail", _
"this is a test for send mail", "") 这句话发信,192.168.1.19是发信服务器。sendadd是目的地地址,resvAdd是发信的地址,后面两句话是标题和内容

现在我想做的就是把这个vb程序修改成动态链接库,就是vs2003的类库,然后提供4个借口供外界调用,分别是(sendadd是目的地地址,resvAdd是发信的地址,后面两句话是标题和内容),请问该怎么修改,请给出代码,谢谢


...全文
142 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
farrio 2004-09-07
  • 打赏
  • 举报
回复
(1)Inherits System.ComponentModel.Component
不是必需的,因为你做的这个类并没有必要的说是要继承Component,所以可以改成inherits object或者干脆不写。
(2)由于(1)的原因,下列的代码也不是必需的。
Public Sub New(ByVal Container As System.ComponentModel.IContainer)
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
Private Sub InitializeComponent()
(3)Dim sendadd As String 等四个
绝对错误!你这样定义,sendadd只作用于New函数内部,应该直接定义private m_sendadd as string,在new里面 m_sendadd = sendadd。然后你的property也应该返回 return m_sendadd。
(4)最好不要做shared的成员,这不是oop所推荐的。所有的成员都应该在实例化之后才可用。
(5)send看不到就是因为你的send不是shared的。只有当你new了class demo之后,才能看到。
(6)你做的应该是动态链接库,不是COM组件。vb.net是做不出COM组件的。
(7)至于怎么在存储过程中调用,我就不知道了。召唤DB达人!
koalapopo 2004-09-07
  • 打赏
  • 举报
回复
学习中
knet 2004-09-07
  • 打赏
  • 举报
回复
怎样在存储过程中调用这个dll阿?
knet 2004-09-07
  • 打赏
  • 举报
回复
我想问一下,我建立的这个叫什么?

动态链接库还是组件还是com组件?
tttt0945 2004-09-07
  • 打赏
  • 举报
回复
mark,studying
knet 2004-09-07
  • 打赏
  • 举报
回复
自己解决了,是因为send没有公开
thipzhao 2004-09-07
  • 打赏
  • 举报
回复
send需要new一个
然后xxx.send调用
knet 2004-09-07
  • 打赏
  • 举报
回复
为什么我按照上面的写法,在应用程序中调用dll的时候,只能看见四个属性,而看不见我写的send方法呢?

急,解决立即给分
knet 2004-09-07
  • 打赏
  • 举报
回复
谢谢楼上的,不过在存储过程中我调用这个dll中的send函数老提醒我send找不到
farrio 2004-09-07
  • 打赏
  • 举报
回复
我做的例子
Public Class ClsMail
Inherits Object

Private m_SendAdd As String
Private m_ResvAdd As String
Private m_Subject As String
Private m_Context As String
Private m_SMTP As String

Public Property SendAddress() As String
Get
Return Me.m_SendAdd
End Get
Set(ByVal Value As String)
Me.m_SendAdd = Value
End Set
End Property

Public Property ReseveAddress() As String
Get
Return Me.m_ResvAdd
End Get
Set(ByVal Value As String)
Me.m_ResvAdd = Value
End Set
End Property

Public Property Subject() As String
Get
Return Me.m_Subject
End Get
Set(ByVal Value As String)
Me.m_Subject = Value
End Set
End Property

Public Property Context() As String
Get
Return Me.m_Context
End Get
Set(ByVal Value As String)
Me.m_Context = Value
End Set
End Property

Public Property SMTP() As String
Get
Return Me.m_SMTP
End Get
Set(ByVal Value As String)
Me.m_SMTP = Value
End Set
End Property

Public Sub New(Optional ByVal SMTP As String = "192.168.1.19")
Me.m_SMTP = SMTP
Me.m_SendAdd = ""
Me.m_ResvAdd = ""
Me.m_Subject = ""
Me.m_Context = ""
End Sub

Public Sub New(ByVal SendAddress As String, ByVal ResveceAddress As String, ByVal Subject As String, ByVal Context As String, Optional ByVal SMTP As String = "192.168.1.19")
Me.m_SMTP = SMTP
Me.m_SendAdd = SendAddress
Me.m_ResvAdd = ResveceAddress
Me.m_Subject = Subject
Me.m_Context = Context
End Sub

Public Sub Send()
'TODO: Please insert ur send command.
End Sub

End Class
cmoremore 2004-09-06
  • 打赏
  • 举报
回复
up,学习一下
knet 2004-09-06
  • 打赏
  • 举报
回复
我下面这个写法清看看有没有错误?

Imports BASP21Lib
Public Class CDemo
Inherits System.ComponentModel.Component

#Region " 组件设计器生成的代码 "

Public Sub New(ByVal Container As System.ComponentModel.IContainer)
MyClass.New()

'Windows.Forms 类撰写设计器支持所必需的
Container.Add(Me)
End Sub

Public Sub New()
MyBase.New()
Dim sendadd As String
Dim resvAdd As String
Dim subject As String
Dim content As String


'该调用是组件设计器所必需的。
InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'组件重写 dispose 以清理组件列表。
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

'组件设计器所必需的
Private components As System.ComponentModel.IContainer

'注意: 以下过程是组件设计器所必需的
'可以使用组件设计器修改此过程。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container
End Sub

#End Region
Public Shared ReadOnly Property sendadd() As String
Get
Return sendadd
End Get
End Property
Public Shared ReadOnly Property resvAdd() As String
Get
Return resvAdd
End Get
End Property

Public Shared ReadOnly Property subject() As String
Get
Return subject
End Get
End Property

Public Shared ReadOnly Property content() As String
Get
Return content
End Get
End Property

Public Sub send()
Dim basptest As New Basp21
basptest.SendMail("192.168.1.19", sendadd, resvAdd, subject, content, "")
End Sub
End Class
zhpsam109 2004-09-06
  • 打赏
  • 举报
回复
学习!
knet 2004-09-06
  • 打赏
  • 举报
回复
Public Class CDemo
Inherits System.ComponentModel.Component

#Region " 组件设计器生成的代码 "

Public Sub New(Container As System.ComponentModel.IContainer)
MyClass.New()

'Windows.Forms 类撰写设计器支持所必需的
Container.Add(me)
End Sub

Public Sub New()
MyBase.New()

'该调用是组件设计器所必需的。
InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'组件重写 dispose 以清理组件列表。
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

'组件设计器所必需的
Private components As System.ComponentModel.IContainer

'注意: 以下过程是组件设计器所必需的
'可以使用组件设计器修改此过程。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
End Sub

#End Region

End Class


怎么样添加呢?
farrio 2004-09-06
  • 打赏
  • 举报
回复
建立一个ClassLibrary工程,然后做一个Class,比如ClsMail。
然后在reference里面加上BASP21Lib。
做New函数,可以使没有参数的,也可以是sendadd resvAdd subject content。
然后做四个property,分别对应上面四个变量。
最后做一个Send方法。
如果你愿意,还可以做一个property指定smtp地址。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧