① Shared Function System.Runtime.
ByVal text As String, ByVal
lpcaption As String, ByVal
wtype As Integer) As Integer
System是Net语言中的一个族,System.Runtime.InteropServices是system中的一个类.System.Runtime.InteropServices.DLLimpor是其中的一个方法.调用DLL的API
① Public Class classA
MessageBoxA(ByVal h As Integer,
ByVal m As String, ByVal c As
String, ByVal type As Integer) As Integer
你可以这样调用 classA.MessageboxA 但是如果没有这个share 在class后打点就没有MessageboxA的成员出现了 ,现在你就象以前一样的使用他吧.
其实上面这个VB.NET函数调用方法并不正确,我们仍旧要使用API声明,只是换了一各形式
如果你认为这就是VB.NET就错了,看看这个:
system.WinForms.MessageBox.Show("对话内容写今天这一节", "标题写今天这一节", messagebox.OK BitOr messagebox.IconAsterisk)
这就是面向对象,你已经完成了所有的任务.不需要任何的API声明.不需要写多余的代码.
① messagebox.IconAsterisk=惊叹号图标
所经点NET就是打点到达,在族后面打点,在类后面打点,在对象后面打点.第二个问题就是类与类之间相互的关系,Net在网上处理人与人的关系,在程序语言中处理类与类的关系.倒底是加不加share,倒底是类后面打点,还是Dim成一个对象(把他当一个变量吧)再说,是等于class,还是New class.是dim xxx as class=new class 还是dim xxx as new class
就是这样VB.NET函数调用将更简单,不须要研究一些很难的东西.
现在我用我所知道的为楼主介绍VB.NET的API调用,请楼主浏览一下,看看行不行.
Windows API就是Windows系统的API函数简称(Application Program Interface,即:应用程序接口函数),它是Windows操作系统提供给各种开发基于Windows平台应用软件的开发语言的一些公用的函数,这些函数一般都比较底层,所以当各种开发语言使用自带的函数或类库已无法解决问题时,调用Windows API函数往往是一种非常直接、有效的解决方法.但由于在程序中调用Windows API函数一般都很复杂,所以对于程序员来说,是否能够灵活的使用Windows API函数,往往也是其水平高低的一个重要标志.但自从微软推出.Net框架以后,各种开发基于.Net平台下的程序语言,如Visual Basic .Net、Visual C#等却很少使用Windows API函数,并且微软公司也不像以前那样,提倡在这些.Net开发语言中使用Windows API函数,其主要的原因如下:
① .Net框架所附带的类库.Net FrameWork SDK是一个内容丰富、功能强大的软件开发包,各种Windows API函数所实现的各种功能几乎都可以在这个软件开发包中找到与之对应的部分.
虽然微软并不提倡在Visual Basic .Net、Visual C#中调用Windows API函数,但由于目前.Net 框架推出时间较短,.Net FrameWork SDK中提供的类库还并不足以完全替换Windows API函数的所有功能,所以在某些时候,.Net开发语言还是必须要调用Windows API函数.
一.平台调用、托管DLL、非托管DLL简介:
托管DLL就是能够在公共语言运行库(Common Language Runtime,简称CLR)中能够直接引用的,并且扩展名为"DLL"的文件.具体所指就是封装各种命名空间所在的DLL文件,如System.dll等.非托管DLL就是平常所的动态链接库等,其中就包括了封装所有Windows API函数的DLL文件.各种非托管DLL中的函数在公共语言运行库中不能直接被调用,而需要经过.Net框架提供的"平台调用"服务后才可以.
"平台调用"是.Net框架为Visual Basic .Net、Visual C#等.Net开发语言提供的一种服务,用以在托管代码中引入各种非托管DLL中封装的函数(其中包括Windows API函数)."平台调用"依赖于元数据在运行时查找导出函数并封装其参数.图01公共语言运行库利用"平台服务"调用非托管DLL中的函数的流程图:
图01:"平台服务"的调用非托管函数的流程图
在托管代码中使用"平台调用"服务调用非托管DLL中封装的函数时,"平台服务"将依次执行以下操作:
①.. 查找包含该函数所在的DLL文件.
在Visual Basic .Net中使用"平台调用"服务,申明Windows API函数主要有二种具体的实现方法:
①.. 使用DllImport特征类来申明Windows API函数.
这二种方法虽有异曲同工之效,但在繁简上却有很大差异,第一种方法申明过程比较复杂,很容易在申明Windows API函数时出错,所以并不提倡.而第二种方法相对简单,并且又保存了以前Visual Basic中的很多语法,所以在平常时大都使用这种方法来申明Windows API函数.
二.VB.Net查看文件中图标的函数及申明Windows API的方法:
(1).使用DllImport特征类来申明Windows API函数:
下面是在Visual Basic .Net中使用DllImport特征类申明二个Windows API函数的具体示例:
'函数ExtractIcon,其功能是是从指定文件的指定位置导出图标的Windows句柄.
Public Function _
End Function
'函数Icon_Num,其功能是获得指定文件中的图标数目
Icon_Num ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer
在使用DllImport特征类申明Windows API函数时,如果申明的函数名称和函数的入口点相同,则可以在申明Windows API函数时,省略定义函数入口点对应的代码,即EntryPoint对象字段对应的代码,这样声明ExtractIcon函数的代码也可以简化为如下所示:
使用"Declare"语句的确比使用DllImport特征类要简单了许多,下面是在Visual Basic .Net中使用"Declare"语句来声明上述二个Windows API函数的具体方法:
'声明ExtractIcon函数
'声明Icon_Num函数
在Visual Basic .Net中声明Windows API函数时,"Declare"语句中Alias关键字的作用相当于使用DllImport特征类中的EntryPoint对象字段.同样在使用"Declare"语句声明Windows API函数时,如果声明的函数和函数的入口点相同,也可以省略Alias关键字对应的代码,所以ExtractIcon函数也可以简化为如下:
下面就结合一个示例的编写过程来掌握的这二个Windows API函数的具体使用方法,这个示例的作用就是读取指定文件中的图标数目,并显示文件中的图标.
三.本文中程序的编写、调试和运行环境:
四.Visual Basic .Net读取文件中的图标的实现步骤:
下面介绍的示例,其功能读取指定文件中包含的图标数目,并把这些图标全部显示出来.下面是这个示例的实现步骤:
① 启动Visual Studio .Net.
四个Label组件,其中二个用以显示提示信息,另外二个分别用以显示选择的文件名称和这个文件中包含的图标数目.
一个ListView组件,利用其显示大图标的属性用以显示选定文件中的图标.
一个OpenFileDialog组件,用以选择要查看图标的文件名称.
一个ImageList组件,它起的是桥梁的作用,首先把从文件中导出的图标存放到这里,然后再提供ListView组件显示出来.
一个Button组件.
①.0. 按照表01中数值来设定设定组件的主要属性:
组件类型 组件名称 属性 设置结果
Form Form1 Text VB.NET查看文件中的图标
Form1 MaximizeBox False
Form1 MinimizeBox False
Form1 FormBorderStyle FixedSingle
ListView ListView1 ImageList1 LargeImageList
ListView1 MultiSelect False
Button Button1 Text 选择文件
Button1 FlatStyle Flat
ImageList1 TransparentColor Color.Transparent
Label Label1 Text 文件名称:
表01:【Visual Basic .Net查看文件中的图标】项目窗体中各组件的主要属性设定数值表
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
If OpenFileDialog1.ShowDialog ( ) = DialogResult.OK Then
'清除组件中的所有项目
ListView1.Items.Clear ( )
ImageList1.Images.Clear ( )
Dim sfName As String = OpenFileDialog1.FileName
Dim iIcon_Num As Integer = Icon_Num ( IntPtr.Zero , sfName , -1 )
'显示文件中的图标数目
Dim i As Integer
For i = 0 To iIcon_Num - 1 Step 1
'强制实现int到uint类型转换
Dim hIcon As System.IntPtr = ExtractIcon ( IntPtr.Zero , sfName , j )
'在imageList1组件中加入当然提取的图标
ImageList1.Images.Add ( Icon.FromHandle ( hIcon ).ToBitmap ( ) )
'在ListView组件中加入一个项目
ListView1.Items.Add ( "第" ◆ ( i ◆ 1 ).ToString ( ) ◆ "个图标" )
'把加入项目的图象索引指向刚才加入图标在imagList1组件中的索引,从而显示图标
ListView1.Items ( i ).ImageIndex = i
Next i
End If
End Sub
五.总结:
解决Visual Basic .Net查看文件中的图标的关键并非是使用.Net框架中提供的类库,而是使用Windows的API函数.虽然这与利用Visual Basic .Net开发跨平台程序的初衷相违背,但的确不失为一种解决问题的方法.有些时候通过Windows API函数能够快捷、方便的解决实际问题,而这往往是只使用.Net FrameWork SDK所望尘莫及的,但随着.Net FrameWork SDK内容的不断丰富,各种新的组成部分和新的功能不断加入,可以预见的是,在未来的.Net FrameWork SDK中必将拥有可以替换本文中介绍的二个Windows API函数的组成部分.
可以的,把项目的类型设成类库,将所有的函数用Public修饰附封装在类里面,生成dll文件.这样别人就可以在别人项目属性的引用页里面添加对你的dll文件的引用,然后导入命名空间,直接使用了.
比如说,在一个项目里:
NameSpace Controller
Public Class ControlMachine
Public Sub Boot()
Public Sub Shutdown()
End Class
End NameSpace
进入另一个项目的项目属性,进入引用页,添加到那个dll文件的引用.在代码中:
Imports Controller '加在代码文档的最顶端
使用:
Dim controller As New ControlMachine
controller.Boot()
controller.Shutdown()
希望你能了解,不懂再追问
在VB.NET的类里,实现一个接口的语句是:
implements接口名称
例如,下面定义一个车(总称)的接口,这里的车是各种车的总称:
Public Interface ICar
Property color() As String
Property speed() As Long
Sub PrintInfo()
End Interface
然后在不同类型的"车"类里实现它:
Public Class A_Car
Implements ICar
Dim m_color As String, m_speed As Long
Public Property color() As String Implements ICar.color
Get
Return m_color
End Get
Set(ByVal Value As String)
m_color = Value
End Set
End Property
Protected Overrides Sub Finalize()
MsgBox(I was deconstructed!)
Public Sub New()
m_color = Red
MsgBox(I was constructed!)
Public Property speed() As Long Implements ICar.speed
Return m_speed
Set(ByVal Value As Long)
m_speed = speed
Public Sub PrintInfo() Implements ICar.PrintInfo
MsgBox(Color: m_color vbNewLine Speed: m_speed, MsgBoxStyle.Information)
在 Form 的 Load 事件中编写:
Dim myCar As New A_Car
myCar.PrintInfo()
运行之后就创建了一个 A_Car 类的实例 myCar,然后出现两个对话框,分别说明实例已经创建和汽车的信息.当窗体卸载时,这个类的实例 myCar 将自动销毁,这时将出现一个"I was deconstructed!"的对话框.
声明一个接口时,需要考虑以下几点:
①接口主体只限于对方法,索引器以及属性的声明;
面向对象的接口
在C◆◆中,一个类被允许继承多个类.但是在Java以后的语言不被允许.
这样,如果想继承多个类时便非常困难.所以开发方想出了新办法:接口.
一个接口内,允许包含变量、常量等一个类所包含的基本内容.但是,接口中的函数不允许设定代码,也就意味着不能把程序入口放到接口里.由上可以理解到,接口是专门被继承的.接口存在的意义也是被继承.和C◆◆里的抽象类里的纯虚函数是相同的.不能被实例化.
定义接口的关键字是interface,例如:
publicinterfaceMyInterface{
public void add(int x,int y);
public void volume(int x,int y,int z);
}
继承接口的关键字是implements,相当于继承类的extends.
需要注意的是,当继承一个接口时,接口里的所有函数必须全部被覆盖.例如:
class Demo implements MyInterface{
public void add(int x,int y){
System.out.println( ◆(x◆y));
public void volume(int x,int y,int z){
System.out.println( ◆(x*y*z));
public static void main(String args[]){
Demo d=new Demo();
d.volume(10,10,10);
输出结果:
①.000
当想继承多个类时,开发程序不允许,报错.这样就要用到接口.因为接口允许多重继承(,),而类不允许.所以就要用到接口.
dim objEye as IEye = new Eye(); '用接口型引用,new 实现类的对象.
messagebox.show(objEye.IEye) '调用属性
调用webservice接口
一般分为静态调用和动态调用
静态调用就是在项目中直接添加服务引用或者web服务引用;
动态调用就是通过模拟http协议调用,这种网上很多提供动态调用服务的处理类,找找直接用就可以了;
静态调用特点:服务参数包含复杂类型(比如自定义的一些实体类)用它比较方便,但是服务如果改变(服务地址更新,服务内容更新)就需要在项目中更新服务引用,重新编译程序;
动态调用特点:对于服务参数包含复杂类型的处理不是很好,如果服务内容改变不需要重新编译程序;
大致想到就这样,详细的可以在网上找找相关的网文,很多资料可以参考的
以上就是土嘎嘎小编为大家整理的Net调用vb接口相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!