vb.Net编程简介之四
来源:互联网 发布:淘宝店铺怎么装修2017 编辑:程序博客网 时间:2024/05/18 17:26
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
大多数的API调用可以象在Visual Basic 6.0中一样使用,因为
数据类型发生了改变。在Visual Basic 6.0中的Long类型在Visual Basic.Net中定义为Integer类型。在升级过程中这些定义会自动改变,例如:
Private Declare Function GetVersion Lib "kernel32" () As
Long
Function GetVer()
Dim Ver As Long
Ver = GetVersion()
MsgBox ("System Version is " & Ver)
End Function
改变为:
Private Declare Function GetVersion Lib "kernel32" () As
Integer
Function GetVer()
Dim Ver As Integer
Ver = GetVersion()
MsgBox("System Version is " & Ver)
End Function
除了数字类型的升级外,Visual Basic 6.0还支持固定长度字符
串类型,该类型升级到Visual Basic.Net后会定义为固定长度字符串兼容类。
所以在Visual Basic 6.0代码中最好使用通用字符串定义,例如:
Private Declare Function GetUserName Lib "advapi32.dll"
Alias _
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As
Long) As Long
Function GetUser()
Dim Ret As Long
Dim UserName As String
Dim Buffer As String * 25
Ret = GetUserName(Buffer, 25)
UserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1)
MsgBox (UserName)
End Function
上面的代码出现了固定长度字符串,最好更改为:
Dim Buffer As String
Buffer = String$(25, " ")
升级到Visual Basic.Net后会称为下面的样子:
Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As
Integer) As Integer
Function GetUser()
Dim Ret As Integer
Dim UserName As String
Dim Buffer As String
Buffer = New String(CChar(" "), 25)
Ret = GetUserName(Buffer, 25)
UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1)
MsgBox(UserName)
End Function
在有些情况下,Visual Basic.Net能够更好的控制传递字符串到
API调用,因为你可以通过ANSI 和UNICODE关键字定义字符串传递的方式。
有三种情况需要对代码最手工改进。
1、在传递给API函数的自定义数据类型定义中包含固定长度字符串和
数组。在Visual Basic.Net中你需要对自定义数据类型定义中的每一个固定长度字符串和数组添加MarshallAs 属性。
2、在定义中使用As Any声明。该种声明不再被Visual Basic.Net支
持,变量定义为As Any通常是为了传递一个既可能是字符串也可能是Null的变量,在Visual Basic.Net中,你可以定义两个不同类型的API,一个为Long类型,一个为String类型,以API函数GetPrivateProfileString 为例:
Private Declare Function GetPrivateProfileString
Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As
String, ByVal
lpKeyName As Any, ByVal lpDefault As String, ByVal
lpReturnedString As String, ByVal nSize As Long,
ByVal
lpFileName As String) As Long
你可以删除As Any而代之以定义两个不同的函数;一个接受Long数
值,一个接收String树脂:
Private Declare Function GetPrivateProfileStringKey
Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As
String, ByVal
lpKeyName As String, ByVal lpDefault As String, ByVal
lpReturnedString As String, ByVal nSize As Long,
ByVal
lpFileName As String) As Long
Private Declare Function GetPrivateProfileStringNullKey
Lib "kernel32"
Alias "GetPrivateProfileStringA" (ByVal
lpApplicationName As String,
ByVal lpKeyName As Long, ByVal lpDefault As String,
ByVal
lpReturnedString As String, ByVal nSize As Long,
ByVal
lpFileName As String) As Long
当你希望传递Null数值时,使用GetPrivateProfileStringNullKey。
3、如果你的程序中有诸如建立线程、Windows子类(subclassing),
消息钩子等API调用时,这些函数在Visual Basic.Net下可能会产生运行时错误。很多这些API在Visual Basic.Net或者.Net架构中有等价的函数。
vb.Net编程简介之四';return true">
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
Windows APIs大多数的API调用可以象在Visual Basic 6.0中一样使用,因为
数据类型发生了改变。在Visual Basic 6.0中的Long类型在Visual Basic.Net中定义为Integer类型。在升级过程中这些定义会自动改变,例如:
Private Declare Function GetVersion Lib "kernel32" () As
Long
Function GetVer()
Dim Ver As Long
Ver = GetVersion()
MsgBox ("System Version is " & Ver)
End Function
改变为:
Private Declare Function GetVersion Lib "kernel32" () As
Integer
Function GetVer()
Dim Ver As Integer
Ver = GetVersion()
MsgBox("System Version is " & Ver)
End Function
除了数字类型的升级外,Visual Basic 6.0还支持固定长度字符
串类型,该类型升级到Visual Basic.Net后会定义为固定长度字符串兼容类。
所以在Visual Basic 6.0代码中最好使用通用字符串定义,例如:
Private Declare Function GetUserName Lib "advapi32.dll"
Alias _
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As
Long) As Long
Function GetUser()
Dim Ret As Long
Dim UserName As String
Dim Buffer As String * 25
Ret = GetUserName(Buffer, 25)
UserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1)
MsgBox (UserName)
End Function
上面的代码出现了固定长度字符串,最好更改为:
Dim Buffer As String
Buffer = String$(25, " ")
升级到Visual Basic.Net后会称为下面的样子:
Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As
Integer) As Integer
Function GetUser()
Dim Ret As Integer
Dim UserName As String
Dim Buffer As String
Buffer = New String(CChar(" "), 25)
Ret = GetUserName(Buffer, 25)
UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1)
MsgBox(UserName)
End Function
在有些情况下,Visual Basic.Net能够更好的控制传递字符串到
API调用,因为你可以通过ANSI 和UNICODE关键字定义字符串传递的方式。
有三种情况需要对代码最手工改进。
1、在传递给API函数的自定义数据类型定义中包含固定长度字符串和
数组。在Visual Basic.Net中你需要对自定义数据类型定义中的每一个固定长度字符串和数组添加MarshallAs 属性。
2、在定义中使用As Any声明。该种声明不再被Visual Basic.Net支
持,变量定义为As Any通常是为了传递一个既可能是字符串也可能是Null的变量,在Visual Basic.Net中,你可以定义两个不同类型的API,一个为Long类型,一个为String类型,以API函数GetPrivateProfileString 为例:
Private Declare Function GetPrivateProfileString
Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As
String, ByVal
lpKeyName As Any, ByVal lpDefault As String, ByVal
lpReturnedString As String, ByVal nSize As Long,
ByVal
lpFileName As String) As Long
你可以删除As Any而代之以定义两个不同的函数;一个接受Long数
值,一个接收String树脂:
Private Declare Function GetPrivateProfileStringKey
Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As
String, ByVal
lpKeyName As String, ByVal lpDefault As String, ByVal
lpReturnedString As String, ByVal nSize As Long,
ByVal
lpFileName As String) As Long
Private Declare Function GetPrivateProfileStringNullKey
Lib "kernel32"
Alias "GetPrivateProfileStringA" (ByVal
lpApplicationName As String,
ByVal lpKeyName As Long, ByVal lpDefault As String,
ByVal
lpReturnedString As String, ByVal nSize As Long,
ByVal
lpFileName As String) As Long
当你希望传递Null数值时,使用GetPrivateProfileStringNullKey。
3、如果你的程序中有诸如建立线程、Windows子类(subclassing),
消息钩子等API调用时,这些函数在Visual Basic.Net下可能会产生运行时错误。很多这些API在Visual Basic.Net或者.Net架构中有等价的函数。
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- vb.Net编程简介之四
- [VB.NET]单元四 窗体编程
- VB.NET编程之托盘程序篇
- VB.NET编程之托盘程序篇
- VB.NET编程之透明窗体篇
- VB.NET编程之托盘程序篇
- VB.NET编程之托盘程序篇
- VB.NET编程之托盘程序篇
- VB.NET编程之托盘程序篇
- VB.NET入门简介
- 【VB/.NET】Converting VB6 to VB.NET 【Part I】【之四】
- 【VB/.NET】Converting VB6 to VB.NET 【Part II】【之四】
- VB.NET 串口访问之四(绝密级)
- VB.NET之旅(四)—类和结构
- vb.net2008 DirectX与VB.NET编程(四)3D音效理论篇
- vb.net串口编程
- VB.NET编程多线程
- VB.NET编程学习心得
- 处理死锁
- VS.NET Beta2安装后添加/删除程序不能正常启动的问题的解决方案
- 如何在SQL SERVER 2000中删除系统文件?
- [c#]:如何在C#中读写INI文件(五)
- PowerBuilder 8.0中ListBox的CheckBox使用方法。
- vb.Net编程简介之四
- 考虑大对象:利用 JAVA 操作 DB2 Universal Database
- 用ASP+SQL Server为网页建一道防火墙 《转》
- Access 新手来看:编号的生成问题
- 应Mr.Cool要求:Using Late Bound COM Objects
- Access 中如何知道引用的相对应的名称?
- 转:“简”话设计模式
- Win2k Server下Oracle 9iAS安装报告(二)
- 转贴自JoyASP:.NET框架(一)