asp.net中引用vb中的函数

原创 2006年06月10日 13:35:00

VB中新建一ActioveX,添加类模块,如下内容:

'工程1

Public Function aa(str1)

    For i = 1 To Len(str1)
        c = Asc(Mid(str1, i, 1))

        If c < 0 Then c = c + 65536
       
        If c > 255 Then
            local1 = i
            Exit For
        End If
    Next

    str1 = Left(str1, local1 - 2)
    aa = str1

End Function

'----------------------------------------------------------------'
'    getStrLen
'    获取字符长度,一个中文字符长度算 2
'    参数:
'        str 需要获取长度的字符串
'    返回值:整数 (字符串的长度)
'----------------------------------------------------------------'
Function GetStrLen(str)
    If IsNull(str) Or str = "" Then
        getStrLen = 0
    Else
        Dim i, n, k, chrA
        k = 0
        n = Len(str)
        For i = 1 To n
            chrA = Mid(str, i, 1)
            If Asc(chrA) >= 0 And Asc(chrA) <= 255 Then
                k = k + 1
            Else
                k = k + 2
            End If
        Next
        getStrLen = k
    End If
End Function

生成 ff.dll

------------------------------------------------

regsvr32 ff.dll 注册

------------------------------------------------

asp中引用:

<%
dim aatest
set aatest = server.createobject("工程1.class1")
response.write(aatest.aa("32/a2/第三/fe"))
%>

-------------------------------------------------

asp.net中引用:

引用-〉添加引用->gongcheng

在.cs文件中加入using 工程1;

 

namespace spc
{
 /// <summary>
 /// WebForm1 的摘要说明。
 /// </summary>
 public class WebForm1 : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.TextBox TextBox1;
  protected System.Web.UI.WebControls.Button Button1;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Button1.Click += new System.EventHandler(this.Button1_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void Button1_Click(object sender, System.EventArgs e)
  {
   工程1.Class1Class a = new Class1Class() ;
   object str = (object)this.TextBox1.Text.ToString();
   Response.Write(a.aa(ref (object)str));
  }

 }
}

其中,a.aa(ref (object)this.TextBox1.Text.ToString())提示"ref 或 out 必须是一个lvalue":

昨天写了个关于socket接收udp包的程序,调用了socket.ReceiveFrom方法,发现了一个c#中关于ref和out参数传递时的问题,这里提出来和大家共同探讨一下,首先声明,下面的结论都是本人推测,还没有得到任何定论,若有错误请大家指正。

首先,ReceiveFrom方法的原型为

public int ReceiveFrom(byte[], ref EndPoint);

有一个为ref的EndPoint参数,用它来返回收到包的源地址信息,ref的语义是传引用,即对所传引用的修改可以反映到方法外面。我一般都使用IPEndPoint来表示地址信息,所以很自然的使用了如下的调用方法

(代码1)

IPEndPoint iep = new IPEndPoint(IPAddress.Any,0);

socket.ReceiveFrom(buffer,ref (EndPoint)iep);

这时编译时出现了一下的错误,“ref或out参数必须是一个lvalue”,iep怎么会不是一个左值呢?关键是在调用方法时使用的强制转换(例如(EndPoint)iep),我改了一下代码

(代码2)

IPEndPoint iep = new IPEndPoint(IPAddress.Any,0);

EndPoint ep = (EndPoint)iep;

socket.ReceiveFrom(buffer,ref (EndPoint)iep);

这次通过编译了。为什么在方法调用时会出问题?这里要考虑类型强制转换时的一个细节,强制转换时编译器会先生成一个临时引用,然后再把这个临时引用传给一个和转换类型相同的引用,这个临时引用比较特别——不是一个左值(lvalue),不能被赋值!而使用ref参数的方法一般都要对这个引用做修改,如果直接把这个临时引用传进去当时编译器会抱怨ref或out参数必须是一个lvalue。而代码2首先将这个临时引用赋值到一个常规引用上去,这时这个常规引用便是可以复制的了。

 

使用:
object str = (object)this.TextBox1.Text.ToString();
Response.Write(a.aa(ref (object)str));


VB+asp.net上传文件

MultiUpload.aspx<%@ Page Language="vb" AutoEventWireup="false" Codebehind="MultiUpload.aspx.vb" ...

asp.net vb新闻页动态生成静态页面的实例代码

首先 建立一个页面1.html  模板页 生成静态页有很多好处,可以缓解服务器压力、方便搜索网站搜索等等,下面介绍一下生成静态页的实例代码,有需要的朋友可以参考一下 最近突然想把项目中...

Vb.net字符操作函数(转)

 函数 语法 功能 Len Len(string|varname) 返回字符串内字符的数目,或是存储一变量所需的字节数。 Trim Trim(string) 将字符串前后的空格去掉 ...
  • wtuqi
  • wtuqi
  • 2016年10月20日 16:19
  • 777

VB.net中DataGrid导出为Excel文件函数

Public Function ExportXLsD(ByVal datagrid As DataGrid) ', ByVal Title As String) 'Dim Mytab...

VB.net中字符串操作函数

VB.net中字符串操作函数   函数 语法 功能 Len Len(string|varname) 返回字符串内字符的数目,或是存储一变量所需的字节数。 Trim Tr...

vb.net中类型转换函数

一、函数名确定它返回的值的数据类型,如下表所示。 函数名 返回数据类型 expression 参数范围 CBool Boolean 数据类型 (Visua...

利用VB.NET Format函数实现四舍五入功能

VB.NET经过长时间的发展,很多用户都很了解VB.NET了,这里我发表一下个人理解,和大家讨论讨论。在VB.NET要做到四舍五入的功能应该用VB.NETFormat这个函数,用CInt或CLng都只...
  • hy6688_
  • hy6688_
  • 2013年06月11日 10:43
  • 3389

vb.net的过程和函数

1.vb.net的Sub过程 Sub过程是在响应事件时执行的代码块。将模块中的代码分成Sub过程后,在应用程序中查找和修改代码变得更容易了。Sub过程的语法是: {Private|Public|F...
  • nvhaixx
  • nvhaixx
  • 2011年12月05日 11:11
  • 5777

VB.NET函数——格式化函

一> 日期时间格式化函数    语法:FormatDateTime (exp As DateTime [, namedformat As DateFormat ]) As String    说...
  • sxycgxj
  • sxycgxj
  • 2013年04月02日 10:28
  • 1970

VB.Net矩阵求秩函数

Public Function Math_Matrix_Rank(ByVal K(,) As Integer, ByVal error_ As Integer, GetList As Integer)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp.net中引用vb中的函数
举报原因:
原因补充:

(最多只允许输入30个字)