用vbc.exe在dos下编译vb程序(转帖一个以前保存的资料)
文件来源:网络代码与表现的分离(asp.net) 很多公司把开发web站点的任务分成两个小组,一个负责设计页面的内容,另一个负责编写程序逻辑。
常用两种方法实现这种分离:
1.创建商业组件(business component)
2.使用后台代码(code-behind)
(当然编码可以用vb 或者c#甚至 c++,这里以vb为例。)
1.商业组件
一个商业组件就是一个vb类文件,需要以下操作:
(1)创建包含一个或者多个vb类的定义的文件,以扩展名.vb保存。
(2)编译该文件。(vb编译器vbc.exe位于WINNT\Microsoft.NET\Framework\\目录下,如使用dos,须将该路径设置到名为path的环境变量里)
(3)把编译后的类文件拷贝到web应用程序的/bin目录下(注意:一定要这样做)
---------------------------------------------------------------------------------------------------------------------------
假设现在我有一个vb类的文件名为ss.vb
'ss.vb
Imports System
Namespace ss
public class DoSomeWork
'some code to define the class
public function ShowSomeThing() As String
'Show some string
end sub
end class
end namespace
我可以用下面的语句编译它
vbc /t:library ss.vb(其中"/t"告诉编译器是生成DLL文件而不是EXE文件
生成ss.dll文件,将其copy到/bin目录下,便可以在以后的asp.net页面中使用了。
'UseSS.aspx
<%@ Import namespace="ss"%>
<script runat=server>
sub Page_Load
Dim somework As New DoSomeWork
lblOut.Text = somework.ShowSomeThing()
end sub
</script>
<html>
<head></head>
<body>
The string to show is.......
<br>
<form runat=server>
<asp:Label id="lblOut" runat=server/>
</form>
</body>
</html>
在导入命名空间后就可以像使用任何.net类一样使用自定义的组件了。
使用组件的属性
方法:创建公共变量或者添加属性访问器语法
分别举例如下:
'user variables------adder.vb
Imports System
Namespace ss
public class Adder
publicfirstValueas integer
publicsecondValue as integer
functionAdd() as integer
return firstValue+secondValue
end function
end class
end namespace
-------------------------------------------------------------------------------
'user properties------adderWithProperties.vb
Imports System
Namespace ss
public class Adder
private _firstValue as integer
private _secondValue as integer
public Property FirstValue as Integer
Get
return _firstValue
End Get
Set
_firstValue = Value
End Set
end property
public Property FirstValue as Integer
Get
return _firstValue
End Get
Set
_firstValue = Value
End Set
end property
'define the second value's property
function AddValue() as Integer
return _firstValue + _secondValue
end function
还可以根据自己的需要添加自己想要的逻辑,如果类中的方法被声明为shared,那么这个方法就是这个类的静态方法,使用时不用声明该类的实例。
2.使用后台代码
上述方法有个缺陷就是不能在自己定义的组件里直接引用asp.net页面里的控件,所以不可能把所有的应用程序逻辑都移到页面外。
这时我们可以使用后台代码。
先看一个表现内容和应用程序代码混在一个文件内的情况。
'example.aspx
-------------------------------------------------------------------
<Script Runat="Server">
Sub Button_Click( s As Object, e As EventArgs )
lblMessage.Text = "Hello!"
End Sub
</Script>
<html>
<head><title>Jumble.aspx</title></head>
<body>
<form Runat="Server">
<asp:Button
Text="Click Here!"
Runat="Server" />
<p>
<asp:Label
ID="lblMessage"
Runat="Server" />
</form>
</body>
</html>
现在再看一下分离后的情况:
表现页面(presentation.aspx)
---------------------------------------------------------
<%@ Page Inherits="myCodeBehind" src="myCodeBehind.vb" %>
<html>
<head><title>Presentation.aspx</title></head>
<body>
<form Runat="Server">
<asp:Button
Text="Click Here!"
Runat="Server" />
<p>
<asp:Label
ID="lblMessage"
Runat="Server" />
</form>
</body>
</html>
后台代码文件(myCodeBehind.vb)
-------------------------------------------------------------------------
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
Public Class myCodeBehind
Inherits Page
Protected WithEvents lblMessage As Label
Sub Button_Click( s As Object, e As EventArgs )
lblMessage.Text = "Hello!"
End Sub
End Class
后台代码实际上使用一个额外级别的继承。后台代码文件是从Page类继承而来,而表现文件又是从后台代码文件继承而来。因此Page类的所以属性在后台代码中都能用,而后台代码的所有属性和方法在表现页面中也都可以用。注意,在使用后台代码时,必须谨慎的为表现文件中使用到的每一个控件声明一个实例。
可以编译或者不编译后台代码文件。如果选择编译,那么将得到的dll文件复制到/bin目录下后还要改一下aspx文件的头部
<%@ Page inherits="codeBehind"%>此时不再需要指明src文件,因为已经编译过了。
还可以从一个后台代码文件继承多个表现页面,而且如果将后台代码文件中的方法定义为overridable 的话,还可以在从他继承出的表现页面里任意的重载该方法。
有的时候你为了隐藏你的源码,甚至可以将整个页面藏到后台,这也是很容易实现的。
应为考虑到文中提到的方法可能通过vlisp来借用,从而扩展vlisp的功能。因此放到本版块,而不是vba版块
页:
[1]