189 8069 5689

关于vb.netalias的信息

vb.net中如何播放声音,是要什么控件嘛?

My.Computer.Audio.Play("SoundFile.wav")

成都创新互联主要从事成都做网站、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务新林,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

SoundFile.wav是你要播放的声音文件的路径

关于VB.NET动态连接库使用四点总结

VB NET动态连接库还是比较常用的 于是我研究了一下 在这里拿出来和大家分享一下 希望对大家有用 Windows动态连接库是包含数据和函数的模块 可以被其它可执行文件(EXE DLL OCX 等)调用 动态连接库包含两种函数 输出(exported)函数和内部(internal)函数 输出函数可以被其它模块调用 而内部函数则只能在动态连接库内部使用

尽管VB NET动态连接库也能输出 数据 但实际上它的数据通常是只在内部使用的 使用动态连接库的优点是显而易见的 将应用程序的一部分功能提取出来做成动态连接库 不但减小了主应用程序的大小 提高了程序 运行效率 还使它更加易于升级 多个应用程序共享一个动态连接库还能有效地节省系统资源 正因为如此 在Windows系统中 动态连接库得到了大量的使用

一般来说 动态连接库都是以DLL为扩展名的文件 如Kernel dll mdlg dll等 但也有例外 如 位Windows的核心部件之一GDI exe其实也是一个动态库 编写动态连接库的工具很多 如VisualC++ BorlandC++ Delphi等 具体方法可以参见相关文档 下面只以Visual C++ 为例 介绍一下开发应用于VisualBasic 的动态连接库时应注意的问题(本文中所有涉及C/C++语言或编译环境的地方 都以VC为例 所有涉及Visual Basic的地方都以VB 为例)

作为一种 位Windows应用程序的开发工具 VB生成的exe文件自然也都是 位的 通常情况下也只能调用 位的动态连接库 但是 并不是所有的 位动态库都能被VB生成的exe 文件正确地识别 一般来说 自己编写用于VB NET动态连接库时 应注意以下几个方面的

问题

生成动态库时要使用__stdcall调用约定 而不能使用缺省的__cdecl调用约定 __stdcall 约定通常用于 位API函数的调用

在VC中的定义文件( def)中 必须列出输出函数的函数名 以强制VC系统将输出函数的装饰名(decoratedname)改成普通函数名 所谓装饰名是VC的编译器在编译过程中生成的输出函数名 它包含了用户定义的函数名 函数参数及函数所在的类等多方面的信息 由于在VC中定义文件不是必需的 因此工程不包含定义文件时VC就按自己的约定将用户定义的输出函数名修改成装饰名后放到输出函数列表中 这样的输出函数在VB生成的应用程序中是不能正确调用的(除非声明时使用Alias子句) 因此需要增加一个 def文件 其中列出用户需要的函数名 以强制VC不按装饰名进行输出

VC中的编译选项 结构成员对齐方式(structure member alignment) 应设成 字节 其原因将在后文详细介绍

lishixinzhi/Article/program/ASP/201311/21696

VB 中alias【别名】是啥作用

说是别名,可是看了相关介绍,发现不是一两句话就能说明白的。一开始我也琢磨了很久,因为计算机基础知识有限,所以没法通俗地讲解给你听。我把我当初记录的电子笔记原封不动粘贴给你看好了,也许你会有更好的理解呢:

Declare语句中的Alias子句是一个可选的部分,用户可以通过它所标识的别名对动态 库中的函数进行引用。例如,在下面的语句中,声明了一个在VB中名为MyFunction的函数,而它在动态库Mydll.dll中最初的名字是MyFunctionX。

Private Declare Function MyFunction Lib "Mydll.dll" Alias "MyFunctionX" ( ) As Long

需要注意的是,Alias子句中的函数名是大小写敏感的,也就是说,必须与函数在生成时的声明(如在C源文件中的声明)一致。这是因为32位动态库与16位动态库不同,其中的函数名是区分大小写的。同样道理,如果没有使用Alias子句,那么在Function(或Sub)后的函数名也是区分大小写的。

通常在以下几种情况时需要使用Alias子句:

A.处理使用字符串的系统Windows API过程

如果调用的系统Windows API过程要使用字符串,那么声明语句中必须增加一个Alias 子句,以指定正确的字符集。包含字符串的系统Windows API函数实际有两种格式:ANSI和Unicode( 关于ANSI和Unicode两种字符集的区别将在后面详细阐述)。因此,在Windows头文件中,每 个包含字符串的函数都同时有ANSI版本和Unicode版本。例如,下面是SetWindowText函数 的两种C语言描述。可以看到,第一个描述将函数定义为SetWindowTextA,尾部的"A" 表明它是一个ANSI函数:

WINUSERAPI BOOL WINAPI SetWindowTextA(HWND hWnd, LPCSTR lpString);

第二个描述将它定义为 SetWindowTextW, 尾部的"W" 表明它是一个Unicode 函数:

WINUSERAPI BOOL WINAPI SetWindowTextW(HWND hWnd, LPCWSTR lpString);

因为两个函数实际的名称都不是"SetWindowText",要引用正确的函数就必 须增加一个Alias子句:

Private Declare Function SetWindowText Lib "user32" _

Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal _

lpString As String) As Long

应当注意,对于VB中使用的系统WindowsAPI函数,应该指定函数的ANSI版本,因为只 有WindowsNT才支持Unicode版本,而Windows95不支持这个版本。仅当应用程序只运行 在WindowsNT平台上的时候才可以使用Unicode版本。

B.函数名是不标准的名称

有时,个别的DLL过程的名称不是有效的标识符。例如,它可能包含了非法的字符(如连 字符),或者名称是VB的关键字(如GetObject)。在这种情况下,可以使用Alias关键字。例 如,操作环境DLLs中的某些过程名以下划线开始。尽管在VB标识符中允许使用标识符,但是 下划线不能作为标识符的第一个字符。为了使用这种过程,必须先声明一个名称合法的过程, 然后用Alias子句引用过程的真实名称:

Declare Function lopen Lib "kernel32" Alias "_lopen" _

(ByVal lpPathName As String, ByVal iReadWrite _

As Long) As Long

在上例中,lopen是VB中使用的过程名称。而_lopen则是动态连接库中可以识别的名称。

C.使用序号标识DLL过程

除了使用名称之外,还可以使用序号来标识DLL过程。某些动态连接库中不包含过程的名称,在声明它们包含的过程时必须使用序号。同使用名称标识的DLL过程相比,如果使用序号,在最终的应用程序中消耗的内存将比较少,而且速度会快些。但是,一个具体的API的序号 在不同的操作系统中可能是不同的。例如GetWindowsDirectory在Win95下的序号为432,而在WindowsNT4.0下为338。总而言之,如果希望应用程序能够在不同的操作系统下运行,那么最好不要使用序号来标识API过程。如果过程不属于API,或者应用程序使用的范围很有 限,那么使用序号还是有好处的。

要使用序号来声明DLL过程,Alias子句中的字符串需要包含过程的序号,并在序号的前面加一个数字标记字符(#)。例如,Windowskernel中的GetWindowsDirectory函数的序号为432;可以用下面的语句来声明该DLL过程:

Declare Function GetWindowsDirectory Lib "kernel32" _

Alias "#432" (ByVal lpBuffer As String, _

ByVal nSize As Long) As Long

在这里,可以使用任意的合法名称作为过程的名称,VB将用序号在DLL中寻找过程。

VB.NET入门--Imports 语句

导入在引用的项目和程序集中定义的命名空间或编程元素 此外 导入在同一个项目中定义的命名空间或元素

Imports [ aliasname = ] namespace or Imports [ aliasname = ] namespace element

各部分说明

aliasname

可选 导入别名 或名称 代码可按该名称而不是完全限定字符串来引用 namespace

namespace

必选 所导入命名空间的完全限制名称 可以为嵌套到任意级别的命名空间的字符串

element

可选 命名空间中所声明编程元素的名称 可以为任何容器元素

备注

每个源文件可以包含任意数量的 Imports 语句 这些语句必须位于任何选项声明(如 Option Strict 语句)之后 任何编程元素声明(如 Module 或 Class 语句)之前

只能在文件级别使用 Imports 这意味着导入的声明上下文必须是源文件 而不能是命名空间 类 结构 模块 接口 过程或块

当需要使用在一个或多个命名空间中声明的同名项目时 导入别名十分有用

请注意 Imports 语句不会将其他项目和程序集中的元素提供给您的项目使用 导入不会取代对引用的设置 它只是使那些已经可用于项目的名称不再需要加以限定

规则

别名 不应使用与 aliasname 相同的名称在模块级别声明成员 如果这样做 Visual Basic 编译器只对声明的成员使用 aliasname 而不再将其识别为导入别名

命名空间名称 可以提供单个命名空间名称 也可以提供嵌套命名空间的字符串 每个嵌套命名空间都通过句点 ( ) 与下一个更高级别的命名空间分隔 如下面的示例中所述

Imports System Collections Generic

元素类型 如果提供 element 它必须表示 容器元素 即可包含其他元素的编程元素 容器元素包括类 结构 模块 接口和枚举

行为

范围 Imports 语句所提供元素的范围取决于是否指定了 element 如果仅指定了 namespace 则该命名空间中所有具有唯一名称的成员以及该命名空间内容器元素的成员无需限定即可使用 如果既指定了 namespace 又指定了 element 则只有该元素的成员无需限定即可使用

限定 命名空间或容器元素外部的代码通常必须使用该命名空间或容器元素的名称来限定成员的名称 除非您的项目要访问具有相同名称的另一个成员 否则使用 Imports 语句后将不必进行此类限定 在这种情况下 您可以在每个 Imports 语句中指定一个 aliasname 然后 您只需导入别名即可限定具有相同名称的成员

示例

下面的示例将导入 Microsoft VisualBasic Strings 类并给其分配一个别名 str 该别名可用于访问 Left 方法

Place Imports statements at the top of your program Imports str = Microsoft VisualBasic Strings Visual BasicClass testClass    Sub showHello()    Display only the word Hello    MsgBox(str Left( Hello World ))    End Sub End Class lishixinzhi/Article/program/ASP/201311/21880


网站标题:关于vb.netalias的信息
本文地址:http://cdxtjz.cn/article/hgsjdj.html

其他资讯