从VB到VB.NET——VB6程序员如何转向.NET

VB6.0和VB.NET区别 学习了一段时间的VB.net,感觉大部分和之前学过的VB形似,但是因为名字不一样,所以肯定就有不同的地方,接下来说说VB和VB.net有哪些不同的地方。 VB.net是推出的一种开发基于.net平台应用程序的开发语言。掌握VB.net不仅要掌握语法,还要理解并运用这些新的概念,功能和观点,还有掌握.net框架。理解CLR(common language runtime,通用语言进行时)。 接下 阅读详情
(发表于《优快云开发高手》2003年9月号)

作者 Mahesh Chand

翻译 韩磊

 

Visual Basic .NET是Microsoft Visual Studio .NET套件中主要组成部分之一。.NET版本的Visual Basic增加了更多特性,而且演化为完全面向对象(就像C++)的编程语言。本文将介绍VB.NET的新特性,并比较VB6.0/VB.NET之间的区别,阐述如何利用VB.NET编写简单的应用程序。

1.1 什么是 VB.NET? 

VB.NET
是VB6.0的后续版本。Microsoft推出全新的编程和操作系统Framework——.NET,支持多种语言利用公共.NET库开发应用程序,这些应用程序在.NET Framework上运行。使用Visual Basic在.NET Framework上编程,这就是VB.NET。

首先,让我演示在VB.NET中写最简单的控制台程序:Hello World。


1.2 Hello, World!

“Hello World!”是初学者学习Windows编程的代表性程序。我们的第一个程序就叫做“Hello VB.NET World!”。该程序在控制台输出一句话:“Hello VB.NET World!”,代码如下所示:


代码 1.1: Hello VB.NET World例子

Imports System

 

Module Module1

    Sub Main ()

        System.Console.WriteLine("Hello VB.NET World!")

    End Sub

End Module 

 

1.3 VB.NET 编辑器和编译器

你可以在记事本或VS.NET IDE等任意文本编辑器中撰写上述代码,然后保存为HelloWorld.vb。 

代码编写完成之后,要么在命令行、要么在VS.NET IDE中编译它。在Microsoft .NET Framework SDK中已经包括VB.NET编译器vbc.exe[1],从IDE或是命令行都可以调用。要从命令行编译HelloWorld.vb,请在命令行窗口输入


vbc HelloWorld.vb /out:HelloWorld.exe /t:exe

编译结束后,HelloWorld.exe被创建到当前目录下。在资源管理其中双击图标或在命令行执行,程序正确地运行了。祝贺你进入VB.NET开发者的行列。

 

Imports 语句 

如你所知,大部分的.NET类型都在名字空间(namespace)中定义。Namespace是定义和管理类别的范畴。察看.NET Framework Class Library,可以看到数以百计的namespace。例如,System namespace就包括了Console、Object等类型定义。如果想使用Console类,需要用Imports指令导入System namespace。如下所示:

Imports System

甚至可以明确地调用namespace而无需用Import导入。下面的例子展示了不用Import的“Hello World!”程序:

代码1.2: Hello VB.NET World例子

Module Module1

    Sub Main ()

        System.Console.WriteLine("Hello VB.NET World!")

    End Sub
End
Module


1.4 解析 "Hello VB.NET World!"

程序第一行是:


Imports System; 

System namespace
定义了Console类,该类用于读写控制台(命令行窗口)。

然后你定义了一个module:

Module Module1

…
End
Module

所有的VB程序都包括一个Main()方法,即应用程序入口点。在例子程序中,我们调用Console.WriteLine()向控制台写入“Hello VB.NET World!”:


    Sub Main ()

        Console.WriteLine(“Hello VB.NET World!”)
    End Sub


WriteLine()
方法归属于Console类,它负责向控制台写一个带有行结束符的字符串。如前所述,Console类定义于System namespace,你通过直接引用来控制类成员。

Console类负责读写系统控制台。读控制台输入用Read和ReadLine方法,向控制台输出用WriteLine方法。

表1.1 Console类定义的方法

方法

用途

例子

Read

读入单个字符

int i = Console.Read(); 

ReadLine 

读入一行 

string str = Console.ReadLine();

Write 

写一行

Console.Write("Write: 1"); 

WriteLine 

写一行,并带上行结束符

Console.WriteLine("Test Output Data with Line"); 

 

1.5 VB.NET有什么新特点? 

作为VB6.0的后续版本,VB.NET更加稳定,而且完全面向对象。也许你还记得,VB6.0部支持继承、重载和接口,所以不是真正面向对象的。而VB.NET则支持这些面向对象特性。VB6.0有两个薄弱环节——多线程和异常处理。在VB.NET中,开发多线程应用和使用C++/C#别无二致,结构化异常处理也得到支持。稍后我们会详细解释这些特性。


下面是VB.NET的特性列表——

·面向对象的编程语言。支持继承、重载、接口、共享成员和构造器。
·支持所有的CLS特性,如存取控制.NET类、与其它.NET语言交互、元数据、公共数据类型、委托等等。
·多线程支持。
·结构化异常处理。
 
1.6 名字空间与集合 

前面讨论了我们的第一个VB.NET程序。该程序中首先引人注意的是名字空间(namespace)。在.NET参考文档中,你会发现每个类都归属于某个namespace。那么,namespace到底是什么?

一个namespace是类和组件的逻辑组合,其目的在于将.NET class按类别定义。微软借用了C++ class packaging概念:namespace来描述这种组合。.NET Framework中的组件被称为集合(assembly)。全部.NET代码在数百个库文件(DLL)中定义。Namespace把assembly中定义的类组织起来。一个namespace可以包括多个assembly,一个assembly也可以在多个namespace中定义。
 
namespace
树的根节点是System namespace。在.NET Library中,每个class都在一组相似的类别中定义。例如,System.Data namespace只包括数据相关类。同样,System.Multithreading只包括多线程类。

在使用.NET支持的语言(如C#、VB.NET、C++.NET等)创建新应用程序时,你会注意到每个应用程序都被定义为一个namespace,而所有的class都归属于这个namespace。通过引用这个namespace,其它应用程序就能存取这些class。
 
在.NET中,代码被编译为中间语言(Intermediate Language,IL),assembly中存储了IL代码、元数据和其它资源文件。同一个assembly可以附属于一个或多个Exe/DLL。所有的.NET库都存储在assembly中。


1.7 VB.NET: 完全面向对象的编程语言

抽象、封装、多态、继承是面向对象语言的四个基本属性。VB6.0不支持继承,而VB.NET则不然。所以,和C++一样,VB.NET也是完全面向对象的编程语言。


Class
和 Module

VB.NET
用Class...End Class语句对创建class。每个VB.NET至少包括一个Module(模块)。Module在Module…End Module语句对中实现。应用程序的主要模块是Main方法,亦即应用程序入口点。

和VB6.0一样,使用Function/Sub关键字可以定义方法。下面的例子显示了如何创建class、添加方法,并从主程序调用方法:
 
Imports System

 

Module Module1

 

    Sub Main ()

        Dim cls As TestClass = New TestClass

        Console.WriteLine(cls.MyMethod)

    End Sub

 

    Class TestClass

        Function MyMethod() As String

            Return "Test Method"

        End Function

    End Class

End Module


Property

属性(Property)是类变量的公共描述。Property…End Property语句用以创建property。属性的Get/Set方法分别用于取得和设置属性值。下面的例子中,Data是TestClass的属性。

Imports System

Imports System.Console

 

Module Module1

    Sub Main ()

        Dim cls As TestClass = New TestClass

        WriteLine(cls.MyMethod)

        WriteLine(cls.Data)

        cls.Data = "New Data"

        WriteLine(cls.Data)

    End Sub

End Module

 

Class TestClass

    Private strData As String = "Some Data"

    Function MyMethod() As String

        Return "Test Method!"

    End Function

 

    ' Adding Data property to the class

    Public Property Data() As String

        Get

            Return strData

        End Get

        Set(ByVal Value As String)

            strData = Value

        End Set

    End Property



重载

VB.NET
通过overload关键字支持方法重载。使用这个关键字,你可以定义同名但不同参数的方法。


类成员访问域

除了原有的Private和Public,VB.NET引入了几个新关键字。全部访问域关键字列表如下:

关键字

作用域

Private

限于class内部

Public

可以从class外访问

Friend

限于class所属的应用程序内

Protected

只能被class和其派生类访问

Protected Friend

能被class、应用程序和派生类访问


继承

继承是面向对象编程语言中最常用的技术。继承让你能够重用类代码和功能。

VB.NET支持继承,而VB6.0则不支持。继承的好处在于你能使用任何人编写的类,从这些类派生自己的类,然后在自己的类中调用父类功能。在下面的例子中,Class B派生自Class A,我们将从Class B中调用Class A的方法MethodA。

Imports System

Imports System.Console

 

Module Module1

    Sub Main ()

        Dim bObj As B = New B

        WriteLine(bObj.MethodA())

    End Sub

End Module

 

' Class A defined

Public Class A

    Function MethodA() As String

        Return "Method A is called."

    End Function

End Class

 

'Class B, inherited from Class A. All members (Public and Protected)

' can be access via B now.

 

Public Class B

    Inherits A

    Function MethodB() As String

        Return "Method B is called."

    End Function

End Class


可以从一个class中派生多个自定义class,也可以从多个class派生一个自定义class。


共享的成员

类的共享成员被类的所有实体共享。共享成员可能是属性、方法或字段/值域。在你不想让用户全面控制自己的类时,共享成员相当有用。例如,你可以开发一个类库,让用户通过共享成员使用其中的部分功能。

 

可以通过class本身引用共享成员,而无需通过类的实体。例如:

Module Module1

    Sub Main ()

        WriteLine(A.MethodA())

    End Sub

End Module

 

' Class A defined

Public Class A

    Shared Function MethodA() As String

        Return "Method A is called."

    End Function

End Class



多线程

VB
语言的一大弱点就是缺乏编写自由线程(free-threaded)程序的能力。在.NET Framework中,所有语言共享CRL(Common Runtime Library,公共运行库),也就是说,你可以用VB.NET、C#或其它.NET语言编写同样的程序。


System.Threading namespace
定义了线程类。我们只需要引入System.Threading namespace,即可使用线程类。


System.Threading.Thread
类提供线程对象,可以使用Thread类创建或破坏线程。


创建线程

使用Thread类的实体创建一个新线程,然后用Thread.Start方法开始执行线程。线程构造器接受一个参数,该参数指明你要在线程中执行的procedure。在下例中,我想在oThread1(Thread类的一个实体)的第二线程中执行SecondThread过程:


oThread1 = New Thread(AddressOf SecondThread)

SecondThread procedure looks like below:

Public Sub SecondThread()

    Dim i As Integer

    For i = 1 To 10

        Console.WriteLine(i.ToString())

    Next

End Sub

然后,调用Thread.Start()开始线程:

oThread1.Start()

 

下面的代码创建两个第二线程:

 

Imports System

Imports System.Threading

 

Module Module1

    Public oThread1 As Thread

    Public oThread2 As Thread

 

    Sub Main ()

        oThread1 = New Thread(AddressOf SecondThread)

        oThread2 = New Thread(AddressOf ThirdThread)

        oThread1.Start()

        oThread2.Start()

    End Sub

 

    Public Sub SecondThread()

        Dim i As Integer

        For i = 1 To 10

            Console.WriteLine(i.ToString())

        Next

    End Sub

 

    Public Sub ThirdThread()

        Dim i As Integer

        For i = 1 To 10

            Console.WriteLine("A" + i.ToString())

        Next

    End Sub

End Module



破坏线程 

调用Abort方法来破坏(中止)一个线程。在调用Abort之前,确保用IsAlive判断线程处于活动状态。


If oThread1.IsAlive Then

  oThread1.Abort()

End If



暂停线程

可以使用Sleep方法来暂停线程执行。Sleep方法接受一个以毫秒为单位的参数,指明线程应当暂停多长时间。

 

下面的例子让线程暂停1秒钟:


oThread2.Sleep(1000)

你也可以使用Suspend和Resume方法来挂起和继续线程执行。



设定线程优先级

Thread
类的Priority属性用于设定线程优先级。该属性可以设置为Normal,AboveNormal,BelowNormal,Highest和Lowest。如:


oThread2.Priority = ThreadPriority.Highest

线程与Apartment

使用ApartmentState属性设置线程的apartment类型,该属性值可以为STA,MTA或是Unknown[2]:


oThread.ApartmentState = ApartmentState.MTA

MTS
意味着可以使用多线程模式,而STA则只能是单线程执行。


Public Enum ApartmentState

{

STA = 0,

MTA = 1,

Unknown = 2,

}


1.8 结构化异常处理
异常处理也被称之为错误处理。作为VB程序员,你一定对On Error Goto和On Error Resume Next这些VB6.0错误处理语句耳熟能详。这种类型的错误处理被称为非结构化异常处理(Unstructured Exception Handling)。而在VB.NET中,Microsoft推出了结构化异常处理机制。VB.NET支持类似C++的TryCatch..Finally控制。Try..Catch..Finally结构如下:
 
Try

' 可能导致异常的代码

Catch

' 当异常发生时处理异常的代码

Finally

' 清理现场

End Try

 

Try语句块用以抛出异常。如果异常发生,在Catch语句块中处理。Finally语句块是可选的,在需要释放资源时特别有用。



1.9 VB6.0与VB.NET的不同之处

除了上面谈到的语言进化,还有一些语法上的变化。所有这些语言和语法的变化在MSDN中均可查到,本文只作简单介绍。



数据类型(Data Type)的改变

VB.NET
中有些数据类型得到改进。下面是变化对照表。



 

数据类型

VB6.0

VB.NET

Integer

16 bit size

32 bit size

Long

32 bit size

64 bit size

Currency

用于存储大浮点数

被decimal替代,支持更高精度

Variant

可以存储任意类型数据

被Object类型替代,也可以存储任意类型数据,但结果更好

Date

Date类型被存储为double

引入DateTime类型,用于存储不同格式的日期


在VB.NET中,Short数据类型是16 bit的。Short,Integer和Long都等同于CLR的System.Int16、System.Int32和System.Int64类型。
 

变量声明的变化

在VB6.0中,变量声明有许多限制。其中之一就是不能同行声明多个变量。如果一定要在一行中声明多个变量,就一定得指明每个变量的类型,否则将被默认为Variant类型。


Dim a1, a2 As Integer 
Dim a3 As Integer, a4 As Integer 

第一行中的a1是Variant类型,a2是Integer类型。第二行中两个变量都是Integer类型。

VB.NET
支持同行声明多个变量,举例如下:


Dim a1, a2, a3 As Integer 

变量初始化是另一个问题。在VB6.0中不能同时声明和初始化变量,而VB.NET则支持这个特性。


Dim name As String = "Mahesh"
System.Console.Write(name) 

声明常量也可以照此办理:

Const DT_COUNT As Integer = 23 

New
关键字。在VB.NET中,New关键字用于创建对象。由于数据类型是对象,所以New关键字用以创建一个数据类型对象。


Dim i As Integer = New Integer()
i = 10
System.Console.WriteLine(i.ToString()) 

代码块级别支持。像C++一样,VB.NET支持代码块级别的作用域检查。在语句块中声明的变量只在块内有效。


For i = 1 To 10
Dim p As Long
System.Console.WriteLine(i.ToString())
Next
System.Console.WriteLine(p.ToString()) 

这段代码在VB.NET中会得到一个编译错误,因为p在For..Next语句块之外不可访问。在VB6.0中这段代码可以通过。



改进了的类型安全

在VB6.0中,当你声明一个对外部过程的引用时,可以指定任意类型的参数为As Any。Any关键字禁止了类型检查,允许任意数据类型传入和返回。


VB.NET
不支持Any关键字。你必须指定每个参数和返回值的数据类型。


数组
VB.NET
对数组作了明显的改动。



数组范围。在VB.NET中,你需要格外留意数组范围问题。VB6.0默认数组下界为0,故数组中的元素数量等与数组上界值加一。下面的数组界限从A(0)到A(10),共有11个元素:


Dim A(10) As Single

可以使用Option Base改变下界值为1。在VB.NET中,数组和C++一样,下界值为0,不支持Option Base。

注意:MSDN文档指出数组只能包括与其尺寸相等的元素数量,例如:

Dim A(10) As Integer 

只能包括10个元素(从A(0)到A(9)),但在编译下面这段代码时我发现它运行良好,看起来数组中容纳了11个元素。



Dim A(10) As Integer 
A(0) = 12 
A(2) = 24 
A(10) = 23 

System.Console.WriteLine(A(0).ToString()) 
System.Console.WriteLine(A(10).ToString())
System.Console.WriteLine(UBound(A).ToString()) 
System.Console.WriteLine(LBound(A).ToString()) 


Lbound
和Ubound分别返回 0与10。

ReDim
和Fixed Array。你可以在VB6.0中指定固定长度的数组。

 

Dim ArrWeekDays(0 To 6) As Integer 


这里的ArrWeekDays数组是固定长度的,不能用ReDim语句改变长度。VB.NET不支持固定长度数组,所以ReDim总是有效。


可以用下面两种方式声明数组:

Dim ArrWeekDays(6) As Integer
Dim ArrWeekDays() As Integer = {1, 2, 3, 4, 5, 6} 

ReDim
语句。在VB6.0中,ReDim用于初始化动态数组。在VB.NET中你不能把它当作声明用。ReDim只能用于改变数组长度,不过不能改变数组维度。



Variant
对阵Object
VB6.0
中的Variant数据类型能存储任意类型变量,VB.NET中Object具备相同能力。


算术操作符
VB.NET
支持类似C++的快捷方式。下面的表格显示了常规操作与快捷操作的不同之处。快捷方式也可用于*、/、|、&等操作符。


操作符        常规语法     快捷方式
加法           A = A+5    A +=5 
减法         A = A – 5  A -+ 5

固定长度字符串

在VB6.0中,可以在声明字符串时指定其长度。VB.NET不支持固定长度字符串。


布尔操作符
VB6.0
中的And、Or或是Xor语句是按位操作符。而在VB.NET中,它们是布尔操作符。执行这些操作将返回true或false。VB.NET引入新操作符来完成按位操作。


操作符           描述          

BitAnd           
按位And
BitOr             
按位Or
BitXor            
按位Xor
BitNot            
按位Not


结构与自定义类型
在VB6.0中,你使用Type…End Type语句块创建结构或自定义类型。例如:


Type StdRec 

StdId As Integer 

StdName As String 
End Type 


VB.NET
引入新的语法:Structure。Type…End Type不再被支持。Structure…End Structure与C++用法相同。可以指定结构中每个元素的可访问域,如Public、Protected、Friend、Protected Friend、Private等。例如:


Structure StdRec 

Public StdId As Integer 
Public StdName As String 

Private StdInternal As String 
End Structure

VB.NET
中的Structures就像类一样,也可以拥有方法和属性。

New
和Nothing关键字

VB6.0
中,AS New和Nothing关键字用于声明一个对象并初始化它。
 
VB.NET
不支持隐式创建对象。如前所言,甚至连数据类型都是对象。你可以采用以下两种方法创建数据类型或对象:
 
Dim i As Integer 
Dim i As Integer = New Integer() 
// Do something 
if i = Nothing Then 
End If 

不支持Set语句
VB6.0
使用Set语句指派对象。例如:

Set myObj = new MyObject
Set a = b

在VB.NET中,不需要使用Set指派对象。例如:

myObj = new MyObj()
a = b

过程(procedure)语法的变化
在VB.NET中过程语法有了很多变化。例如类似C++的过程调用方式、ByVal(传值)为默认类型、Optional关键字、return语句等等。

类似C++的过程调用方式
VB6.0
允许不用加圆括号调用过程(sub)。不过,用Call语句调用函数或sub时,一定要使用圆括号。例如:

Dim I as Integer
Call EvaluateData(2, i) 
EvaluateData 2, i 

在VB.NET中,所有的方法调用都需要圆括号,而Call语句则是可选的。
 
ByVal
是默认参数类型
在VB6.0中,在调用函数或sub时ByRef(传址)是默认类型。那意味着所有改变将反映到传入的变量。VB.NET改变了这种方式。现在,默认的参数类型是ByVal(传值)。
 
Optional
关键字
VB6.0
使用Optional关键字可用来让用户决定传入一个默认值,之后在调用IsMissing函数判断参数是否有效。
 
而在VB.NET中,每个可选参数必须声明其默认值,无需调用IsMissing函数。例如:

Sub MyMethod(Optional ByVal i As Integer = 3) 

Return语句
VB.NET的Return语句与C++相似。使用Return语句把控制权从过程返还给调用者。在VB6.0中,Return语句与GoSub语句一起使用。VB.NET不再支持GoSub语句。


流程控制的改变
下面是VB.NET对流程控制语句的修改:

1. GoSub
不再受到支持。

2. Call
、Function和Sub语句均可用于调用过程。

3. On ... GoSub
和On ... GoTo语句不再受支持。可以使用Select Case语句来替代。

4. While ... Wend
语句现在改为While…End While语句。不再支持Wend关键字。

小结 
Visual Basic .NET
是.NET版本的Visual Basic。通过本文你了解到VB.NET的基本概念,而且也从VB6.0开发者的角度对VB.NET进行了考察。

 



[1] 译注:这意味着你无需购买VS.NET即可进行VB.NET开发

[2] 译注:STA-Single Threaded Apartment;MTA-Multi Threaded Apartment

VB.NET与VB6.0区别初认识 VB.NET看完曹祖圣老师的视频,一口的台湾话,连PPT都不是简体中文的,听起来颇有意思。(.NET说是当内,第一次还想什么是当内呢。哈哈)不过话又说回来,这套视频和平常的视频不太一样,好像是对VB.NET有了一些了解之后在做的一些介绍。         课程: 阅读详情

相关推荐

VB6和VB.NET中对光标的编程

在VB6中利用API对光标进行编程:Option ExplicitPrivate Type POINTAPI X As Long Y As LongEnd TypePrivate Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Declare

李洪根的blog-专注软件开发技术 6247

如何让VB6.0升级到VB.NET的过程变得更简单?

我以前都是用C#来写,这次搞这个VB.NET项目,有点突然。还好语言都是相通的。 1.虽说以前的Microsoft Visual Basic和.NET都是微软自己的东西,可有很多功能的实现方式还不一样,特别是那些控件。 2.每个程序都会有自己的业务逻辑,有些可能会很复杂,甚至读别人的代码时你可能对业务逻辑那部分会完全一头雾水。 开始也打算在.NET环境下重做,可在做了一些尝试后发现根本没法了解那个VB6.0程序的业务逻辑,以致于从VB6.0转换到.NET下后,那些老的graph控件没法工作。和项目经理做了

chinaherolts2008的博客 3629

Vb.NET与VB6.0的区别

Visual Basic .NET是Microsoft Visual Studio .NET套件中主要组成部分之一。.NET版本的Visual Basic增加了更多特性,而且演化为完全面向对象(就像C++)的编程语言。 1.什么是VB.NET     Microsoft推出全新的编程和操作系统Framework——.NET,支持多种语言利用公共.NET库开发应用程序,这些应用程序在.NET

张晓 2189

VB6.0 和VB.NET 函数对比

VB6.0和VB.Net的对照表 VB6.0 VB.NET AddItem Object名.AddItem Object名.Items.Add ListBox1.Items.Add ComboBox1.Items.Add Abs 函数 System.Math.Abs 方法 API 函数关系 Microsoft Win32和Mic...

axin83693的博客 399

VB.NET与VB6的主要区别和迁移注意事项

VB.NET与VB6(Visual Basic 6.0)的主要区别体现在多个方面,包括语言结构、类型系统、运行时环境、面向对象编程的支持、Unicode支持、内存管理以及集成开发环境(IDE)等。

2402_84885073的博客 1466

C#代码项目转换VB.NET项目代码(可整个项目转换)

C#代码项目转换VB.NET项目代码(可整个项目转换)C#代码项目转换VB.NET项目代码(可整个项目转换)

vb6转vb.net

一直在用vb6写软件,但最近系统要做web版,但之前的业务规则全在代码中写死了,没用使用存贮过程,如果在web端重写规则,则工作量太大,项目时间也不允许,只好把业务规则转到vb.net中。现在的vb.net版本已不支持从vb6转入,不过可以直接把业务规则复制到新的vb.net中,差异很小,基本改改就行。转换过程中以下几点要特别注意:1、vb6中过程调用可以不用括号包围参数,如 add a,b这样是合法的,但vb.net中不支持这种写法,必须是add(a,b)这样变动。2、vb6中支持感叹号(!)形式访问fi

chinaherolts2008的博客 1280

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 195

将VB6转换到VB.NET:美梦尚未成真

VB.NET,发布于2002年。其时已经有相当大量的兼容性问题为人们所诟病,这些问题中有许多都并非在核心语言上所做的变动,而只是一些类库的缺失。 比如说,当时将任何一个带有打印功能的VB应用转换过去,是一件不可能完成的任务。尽管VB6的Printer对象非常原始,而且显而易见的是PrintForm命令也很普通,但二者没有一个被纳入VB.NET。甚至连本质上不过是一些属性加上一个OnPa...

a785842114的博客 579

游戏资源解包神器NSCB实战:手把手教你提取Switch游戏视频(nsm转MP4)

本文详细介绍了如何使用NSCB工具链从Switch游戏中提取nsm视频和hca音频资源,并将其转换为可编辑的MP4和MP3格式。通过NSC Builder、CriPakTools等工具的分步操作指南,帮助内容创作者高效获取游戏资源,同时提供音视频同步合成、批量处理等高级技巧,为创意素材制作提供完整解决方案。

weixin_29197835的博客 887

深度学习之基于Pytorch手指静脉识别系统(

一、项目背景与目标手指静脉识别技术是一种新兴的生物特征识别技术,它依据人类手指中流动的血液可吸收特定波长的光线这一科学原理,利用手指内的静脉分布图像来进行身份识别。与传统的生物识别技术(如指纹识别)相比,手指静脉识别技术具有不易伪造、识别精度高、非接触性等特点,因此在安全性要求较高的场景(如金融、医疗、公安等)具有广阔的应用前景。本项目旨在利用PyTorch深度学习框架,构建一套高效、准确的手指静脉识别系统。

Q1744828575的博客 830

简要分析VB6.0和VB.NET区别

现在随着VB.NET的发展,大部分人都放弃使用VB6.0而选择VB.NET,下面我们就来研究一下VB6.0和VB.NET的区别。VB.NET是微软公司在2002年推出的一种开发基于.Net平台应用程序的开发语言,也是微软公司极力推荐的一种开发.Net平台应用程序的开发语言。首先还是让我们来简单了解一下VB.NET和其前一个版本,也是目前世界上拥有最多使用者的开发语言--VB 6.0的主要区别。 ...

夏晨Season的博客 1万+

Hypermesh二次开发实战:从Tcl/Tk脚本到Ext API的进阶之路

本文系统介绍了Hypermesh二次开发的进阶路径,从自动化重复操作的Tcl/Tk脚本入门,到利用HMASCII接口深度读写模型数据,最终深入Ext API进行高性能计算与功能定制。通过实战案例,帮助工程师掌握从脚本录制到C++插件开发的完整技能,显著提升CAE前处理效率与自动化水平。

weixin_29306875的博客 670

VB6与VB7(VB.NET)的异同

刚刚开始VB.NET的学习,就本能的直接上手了视频的学习,但实在是能力有限,不能很好的理解材料中的内容,无奈之下,就看了一些VB的pfd的文件,希望从中受益些许。         如果学过VB6,现在又转而学习VB7的人,大概都会有类似本文的总结或思考,我也浏览过一些文章,下面是我在看过文章之后的一些简单整理。有不妥之处还请斧正。         PS:今天恰逢小年,算是给自己

王金龙 7969

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 208

【MATLAB】STM32电机调速闭环控制工程

本文提出了一种基于MATLAB仿真与STM32实现的直流电机闭环PID调速控制方案。通过MATLAB建立电机数学模型并进行参数整定,仿真验证了增量式PID算法在启停、稳态和抗扰动方面的优越性能。基于STM32F103搭建了硬件系统,实现了编码器测速、定时中断控制、PWM输出等功能。实测表明,该系统转速超调<2%、稳态误差±2r/min,具备快速响应和强抗扰能力。相比开环控制,闭环调速显著提升了动态性能和稳态精度。方案提供了完整的仿真代码和嵌入式工程源码,可直接应用于智能小车、工业传动等场景,具有较高的

unber的博客 50

VB.NET与VB6.0的区别

VB.NET的视频已经看完了,虽说是VB.NET视频,但是大部分讲的是.NET平台。其实VB.NET就是VB6.0与C#的结合体,VB6.0的语法加上C#的思想。         一、整体                  二、具体         2.1 什么是 VB.NET?  VB.NET是VB6.0的后续版本。Microsoft推出全新的编程和操作系统Framework—

君君的博客 5705

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝

RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 dma,实现零拷贝.

J。 1262

在VB6和VB.NET中进行图象捕获

在VB6和VB.NET中进行图象捕获VB6中进行图象捕获  ----------------------------------------------------------------------------Author:lihonggen0Date:2002-6-19功能:抓屏----------------------------------

李洪根的blog-专注软件开发技术 6262

【WRF实操】四层嵌套网格设计-以粤港澳大湾区GBA为例

四层嵌套网格设计-以粤港澳大湾区GBA为例

WW、forever的博客 820

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

vb.net类型转换_将VB6转换为VB.NET

vb.net类型转换 VB.Net has a built-in migration tool, but converting VB6 code to VB.NET isn’t as easy as loading it to the newer software. The migration tool does a lot of the work, especially with syntax,...

cumao2792的博客 1785

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 举重若轻的ASP.NET开发工具——Web Matrix
下一篇: 从VB到VB.NET
GoBest
博客等级 码龄22年 4粉丝 27原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值