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&lt;%@ Page Language="vb" AutoEventWireup="false" Codebehind="MultiUpload.aspx.vb" ...

vb.net的过程和函数

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

VB.NET调用Windows API函数(整理中)

1、发送Windows消息: Private Declare Auto Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal...

VB.NET 之 Chr 函数

Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的 ...

VB.net调用C++ 6.0 DLL内部函数

VB.net调用C++ 6.0 DLL内部函数动态链接库技术是Windows最重要的实现技术之一,Windows的许多新功能、新特性都是通过DLL来实现的。其实,Windows本身就是由许多DLL组成...

VB.NET 字符串搜索、比较、筛选与替换函数(转帖)

1)字符串比较比较函数StrComp ()       语法:StrComp (str1 As String , str2 As String [,ampare As Microsoft.Visu...

VB.NET 章鱼哥出品--利用API函数AnimateWindow创建Popup提示窗口,窗体的动画效果

当我们打开电脑上网时,是不是会经常看到桌面的右下角弹出一个小的新闻热点窗体,我们可以实现吗?当然可以,这篇文章就来给您掩饰怎么样来用代码实现。看吧,正写着呢弹出了一个。 一、主要用到的函数是API函...

vb.net常用函数

Abs(number) 取得数值的绝对值。   Asc(String) 取得字符串表达式的第一个字符ASCII 码。   Atn(number) 取得一个角度的反正切值。   Cal...

VB.NET字符串函数

VB.NET字符串函数 1:字符串函数StrComp    比较两个字符串StrConv    转换字符串InStrRev、StrReverse 翻转字符串LCase、UCase   转换为小写或大写...

VB.net中字符串操作函数

VB.net中字符串操作函数   函数 语法 功能 Len Len(string|varname) 返回字符串内字符的数目,或是存储一变量所需的字节数。 Trim Tr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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