DotNet · 2022年5月2日

vb.net使用Win32API(声明DLL函数,使用DllImport和Declare)

在Visual Basic .Net中使用“平台调用”服务,申明Windows
API函数主要有二种具体的实现方法:

  1.使用DllImport特征类来申明Windows
API函数。

  2.使用“Declare”语句来申明Windows
API函数。

  这二种方法虽有异曲同工之效,但在繁简上却有很大差异,第一种方法申明过程比较复杂,很容易在申明Windows
API函数时出错,所以并不提倡。而第二种方法相对简单,并且又保存了以前Visual Basic中的很多语法,所以在平常时大都使用这种方法来申明Windows
API函数。

  二.VB.Net查看文件中图标的函数及申明Windows API的方法:

  Visual
Basic .Net要实现查看文件中的图标,目前只使用.Net FrameWork SDK是无法实现这种功能的,正如前面所说,主要是由于.Net
FrameWork SDK推出的时间较短,其功能还不可能面面俱到。解决问题的关键是正确使用Windows API函数,其中所涉及到的Windows
API函数主要有二个:其一是获得指定文件中的图标数目;其二是从指定文件的指定位置导出图标的Windows句柄。这二个函数都位于
“Shell32.dll”文件中,并且函数的入口点都为“ExtractIcon”。下面是在Visual Basic
.Net中分别使用DllImport特征类和“Declare”语句申明这二个Windows
API函数的具体方法。

  (1).使用DllImport特征类来申明Windows API函数:

  下面是在Visual
Basic .Net中使用DllImport特征类申明二个Windows
API函数的具体示例:

  ’函数ExtractIcon,其功能是是从指定文件的指定位置导出图标的Windows句柄。

  <
System.Runtime.InteropServices.DllImport ( “Shell32.dll” , EntryPoint :=
“ExtractIcon” ) > _

  Public Function _

  ExtractIcon ( ByVal src
As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 )
As System.IntPtr

  End
Function

  ’函数Icon_Num,其功能是获得指定文件中的图标数目

  <
System.Runtime.InteropServices.DllImport ( “Shell32.dll” , EntryPoint :=
“ExtractIcon” ) > _

  Public Function _

  Icon_Num ( ByVal src As
System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As
Integer

  End Function

  在使用DllImport特征类申明Windows
API函数时,如果申明的函数名称和函数的入口点相同,则可以在申明Windows
API函数时,省略定义函数入口点对应的代码,即EntryPoint对象字段对应的代码,这样声明ExtractIcon函数的代码也可以简化为如下所示:

  <
System.Runtime.InteropServices.DllImport ( “Shell32.dll” ) > _

  Public
Function _

  ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName
As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr

  End
Function

  (2).使用“Declare”语句来申明Windows
API函数:

  使用“Declare”语句的确比使用DllImport特征类要简单了许多,下面是在Visual Basic
.Net中使用“Declare”语句来声明上述二个Windows API函数的具体方法:

  Declare Auto Function
ExtractIcon Lib “Shell32.dll” Alias “ExtractIcon” ( ByVal src As System.IntPtr ,
ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As
System.IntPtr

  ’声明ExtractIcon函数

  Declare Auto Function Icon_Num
Lib “Shell32.dll” Alias “ExtractIcon” ( ByVal src As System.IntPtr , ByVal
strFileName As string , ByVal uiIconIndex As Integer ) As
Integer

  ’声明Icon_Num函数

  在 Visual Basic .Net中声明Windows
API函数时,“Declare”语句中Alias关键字的作用相当于使用DllImport特征类中的EntryPoint对象字段。
同样在使用
“Declare”语句声明Windows
API函数时,如果声明的函数和函数的入口点相同,也可以省略Alias关键字对应的代码,所以ExtractIcon函数也可以简化为如下:

  Declare
Auto Function ExtractIcon Lib “Shell32.dll” ( ByVal src As System.IntPtr , ByVal
strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr

 
 

最新电影,电视剧,尽在午夜剧场

电影电视剧午夜不寂寞