在VS.Net 平台下调用Win API 函数或Win32 DLL

        我们在做项目时,常常要用到别的公司开发的硬件产品,  而有关对硬件产品的控制的
DEMO 又常常是用VC6.0编写的,我们如何将他们编写的DLL应用到我们现在的.net环境中些,
微软为我们提供了”平台调用服务 (P / Invoke)”来方便的使用它们.

    通过平台调用服务,托管代码可以调用本机(非 ActiveX) DLL 中实现的非托管函数。
P
/ Invoke 语义方面的用法与在 .NET Framework 完整版中相同, 但 .NET Framework 精简
版对于非托管和托管代码之间封送的对象和类型只提供有限的支持。 
    P
/ Invoke 位于 System.Runtime.InteropService 命名空间中。在应用程序代码中,应
该声明要调用的非托管函数。此操作可以通过 DllImport 属性执行。说明包括模块名称(
特定的 DLL 文件名)、入口点名称(要调用的非托管函数的名称)、调用约定和 
SetLastError 标志。调用约定描述了将参数传递给非托管方法的方式。在 .NET Framework
精简版中,所支持的唯一调用约定是 WinAPI 约定,此约定与 C
++  中的 __cdecl 约定对应。
默认情况下,C# 将 SetLastError 标志设置为 
false 。     将其设置为  true  允许您调用 
Marshal.GetLastWin32Error,以检索引发的上一个非托管错误。


    例如,要调用非托管 DLL(即 coredll.dll)中的 FindWindow 函数,应在项目中
包含以下代码:
[DllImport(
" coredll.dll " , " FindWindow " ,SetLastError = true )]
public   extern  IntPtr FindWindow( string  ClassName,  string  WindowName);
    我们在调用它们时更多是要注意非托管数据类型与托管数据类型之间的对应关系,是传
值还是传地址。 如果处理不好 , 即便只有一个错误,你的程序就有可能无法运行。 好在
vs.net2005对你转换的错误会有一些提示,不过你还是要小心为好。
如unsigned 
int  BaseAddr  对应转换成 
    [MarshalAs(UnmanagedType.U4)] Uint32  BaseAddr;
    你不可将其转换成:
    [MarshalAs(UnmanagedType.U1)] 
byte   cx;
    虽然 Byte 为 8位无符号整数.
    详细的说明请参看MSDN。本文只是学习笔记,仅供参考。希望也能给大家带来方
便。

// ================================================
// 1..Pinvoke:从托管代码中调用非托管函数
// =================================================
[DllImport(S " winmm.dll " ,CharSet = CharSet::Auto )]      // 按原名称进行引用
static   bool  sndPlaySound(String  *  pstrWaveFile, int  nSoundFlag);
// 在托管定义中为非托管函数指定一个别名。DllImport属性指定参数EntryPoint可以
用来指定非托管函数
// 的真实名称
[DllImport(S " winmm.dll " ,CharSet = CharSet::Auto ,EntryPoint = S " sndPlaySound " )]
// 按原名称进行引用
static   bool  myPlayer(String  *  pstrWaveFile, int  nSoundFlag);
// ====按原函数名称进行调用======
 sndPlaySound(S " c:\\WavFiles\\Windows XP 注销音.wav " , 0 );
// ====按自定义名称进行调用======
 myPlayer (S " c:\\WavFiles\\Windows XP 注销音.wav " , 0 );

字符串封送处理和名称匹配
    CharSet 字段接受以下值:
    CharSet.Ansi(默认值) 
    •    字符串封送处理 
    平台调用将字符串从托管格式 (Unicode) 封送为 ANSI 格式。 
    •    名称匹配 
    在 DllImportAttribute.ExactSpelling 字段为 
true (它是 Visual Basic  2005  中的
默认值)时, 平台调用将只搜索您指定的名称。例如,如果指定 MessageBox,则平台调用
将搜索 MessageBox,如果它找不到完全相同的拼写则失败。 
   当 ExactSpelling 字段为 
false (它是 C ++  和 C# 中的默认值)时,平台调用将首先
搜索未处理的别名 (MessageBox), 如果找不到未处理的别名,   则将搜索已处理的名称 
(MessageBoxA)。请注意,ANSI 名称匹配行为与 Unicode 名称匹配行为不同。 
    CharSet.Unicode 
    •    字符串封送处理 
    平台调用会将字符串从托管格式 (Unicode) 复制为 Unicode 格式。 
    •    名称匹配 
    当 ExactSpelling 字段为 
true (它是 Visual Basic  2005  中的默认值)时,平台调
用将只搜索您指定的名称。例如,如果指定 MessageBox,则平台调用将搜索 MessageBox,
如果它找不到完全相同的拼写则失败。 
    当 ExactSpelling 字段为 
false (它是 C ++  和 C# 中的默认值)时,平台调用将首先
搜索已处理的名称 (MessageBoxW), 如果找不到已处理的名称,   则将搜索未处理的别名 
(MessageBox)。请注意,Unicode 名称匹配行为与 ANSI 名称匹配行为不同。 
    CharSet.Auto 
    •    平台调用在运行时根据目标平台在 ANSI 和 Unicode 格式之间进行选择。

 

// ================================================
// 2..在托管C++应用程序中利用Pinvoke接收回调通知.
// =================================================
// 利用Pinvoke您可以注册托管的回调处理程序函数,并把它传递给支持回调的非托管函数.
// EnumWindows API 函数的原型
// BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
// 为EnumWindows API 函数的第一个参数“WNDENUMPROC”(一个回调函数的指针)声明一
// 个委托。
    __delegate  bool  EnumWindowsProcCallBack( long  hWnd, long  lParam);
    
// 定义一个常量,用于定义Windows标题的最大长度.
     #define  Max_Title_Chars 512
    
// 为Windows API函数EnumWindows (USER32.DLL)    提供一个托管函数定义, 并利用
    
// DllImport属性指定导出
    
// EnumWindows()的DLL;
[DllImport(S " user32.dll " )]
static   bool  EnumWindows(EnumWindowsProcCallBack  * pfnCallBack, long  lParam);
// 为Windows API函数GetWindowText (USER32.DLL)提供一个托管函数定义.
[DllImport(S " user32.dll " )]
static   int  GetWindowText( long  hWnd,StringBuilder  * lpstrTitle, int  nMaxCount);
// 定义一个代表回调处理程序的托管函数,EnumWindowsProcCallBack委托将指向这个托函
// 数的定义, 所以还要有相同的签名。我们利用此回调处理程序来显示窗口的标题,这个
// 标题可以从EnumWindows()所传递的窗口句柄获得.
static   bool  DisplayWindowTitle( long  hWnd, long  lParam)
{
  StringBuilder 
*lpstrTitle=new StringBuilder(Max_Title_Chars);
  
//Get the Window's title
  GetWindowText(hWnd,lpstrTitle,Max_Title_Chars);
  
//Check if this window has a title
  if(!lpstrTitle->ToString()->Equals(S""))
  
{
    
//Display the title
    MessageBox::Show (lpstrTitle->ToString());
  }

  
return true;
}

// 使用:
// 在调用EnumWindows()之前,您必须给它传递DisplayWindowTitle()回调处理函数的地址,
// 以创建EnumWindowsProcCallBack委托的实例.
  EnumWindowsProcCallBack  * pfnCallBack =
  
new  EnumWindowsProcCallBack( 0 , & DisplayWindowTitle);
  
// 调用user32.dll中的API函数EnumWindows
  EnumWindows(pfnCallBack, 0 );    

// ============================================================
// 3利用Pinvoke为非托管DLL中的函数传递结构.
// 在托管代码调用一个非托管代码时,时常需要传递一个非托管结构或者一个用户定义的数
// 据类型作为参数。在这种情况下,您就需要建立一个托管类或者结构,这个类或者结构要
// 与非托管结构的物理布局和字节顺序保持一致,这样的话你建立的这个类或结构就可以代
// 替非托管结构传递结非托管函数。您还可以通过利用StructLayout属性对一个托管类或者
// 结构进行物理布局,从而进行另外的控制.

LayoutKind 枚举: 控制当导出到非托管代码时对象的布局。

成员:

 

成员名称

说明

Auto

运行库自动为非托管内存中的对象的成员选择适当的布局。使用此枚举成员定义的对象不能在托管代码的外部公开。尝试这样做将引发异常。 

Explicit

对象的各个成员在非托管内存中的精确位置被显式控制。每个成员必须使用 FieldOffsetAttribute 指示该字段在类型中的位置。 

Sequential

对象的成员按照它们在被导出到非托管内存时出现的顺序依次布局。这些成员根据在 StructLayoutAttribute.Pack 中指定的封装进行布局,并且可以是不连续的。


备注

此枚举与 StructLayoutAttribute 一起使用。默认情况下,公共语言运行库将使用 Auto 布局值。为减少与 Auto 值关联的布局相关问题,C#Visual Basic C++ 编译器为值类型指定了 Sequential 布局。

 

示例:参数中有回调函数的WINAPI 函数在托管环境中的调用

(其中createThread (…) 函数中第三个参数就需要调用自定义的WINAPI 函数)
//非托管函数的托管调用声明

[StructLayout(LayoutKind.Sequential)]  //在本例中没有用到它.

public struct SECURITY_ATTRIBUTES

{

uint nLength;

 IntPtr lpSecurityDescriptor;

 UInt32 bInheritHandle;

 } ;

[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]

public static extern IntPtr CreateEvent(IntPtr lpEventAttributes, Boolean bManualReset, Boolean bInitialState, [MarshalAs(UnmanagedType.LPStr)]  String lpName);

 

[DllImport("kernel32")]

public static extern IntPtr CreateThread(

IntPtr lpThreadAttributes,

uint dwStackSize,

ThreadProc lpStartAddress, // ThreadProc as friendly delegate

IntPtr lpParameter,

uint dwCreationFlags,

out uint dwThreadId);

//函数原型可参看msdn

定义:自定义WINAPI函数在托管环境下的声明

//stdcall   //c++中的 自定义的WINAPI 函数:   DWORD WINAPI Fun1Proc(LPVOID lpParameter)

static int  Fun1Proc(IntPtr  lpParameter)

{

MessageBox.Show ("thread is running");

       return 0;

}

// Thread proc, to be used with Create*Thread

public delegate int ThreadProc(IntPtr param);

//使用:

using DWORD =System.Int32 ;

 using WORD =System.Int16 ;

 using HANDLE = System.IntPtr;

 using HWND = System.IntPtr;

 using HDC = System.IntPtr;

 using PVOID = System.IntPtr;

using LPVOID = System.IntPtr;

HANDLE hThread=IntPtr.Zero;

  uint x = 0;

  ThreadProc proc = new ThreadProc(Fun1Proc);

hThread = CreateThread(

  IntPtr.Zero,

  0,

  proc, hEvent,

  0, // flags

  out x);

 WaitForSingleObject (hThread,unchecked((uint)-1));

 CloseHandle (hThread);

 MessageBox.Show ( "main thread is running" );

 

//CreateEvent 函数原型
//CreateEvent, Win API, as implemented in kernel32.dll:

HANDLE CreateEvent(

  LPSECURITY_ATTRIBUTES lpEventAttributes,

  BOOL bManualReset,

  BOOL bInitialState,

  LPCTSTR lpName

);


//WINAPI 函数在托管环境下的声明示例
 
[DllImport("kernel32.dll, SetLastError=true ")]

static extern IntPtr CreateEvent(IntPtr lpEventAttributes,

       bool bManualReset, bool bInitialState,

       [MarshalAs(UnmanagedType.LPStr) string lpName);

 

VB.NET

Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA"(_

           ByVal dwFlags As Integer, ByRef lpSource As Object, _

           ByVal dwMessageId As Integer, ByVal dwLanguageId As Integer, _

           ByVal lpBuffer As String, ByVal nSize As Integer, _

           ByRef Arguments As Integer) As Integer

C# definition

[DllImport("kernel32.dll", SetLastError=true)]

   static extern int FormatMessageA ( int dwFlags, ref object lpSource,

   int dwMessageId, int dwLanguageId, string lpBuffer,

   int nSize, ref int Arguments)

Managed C++. NET

[DllImport("KERNEL32.DLL",EntryPoint="MoveFileW",

   SetLastError=true,CharSet=CharSet::Unicode,ExactSpelling=true,

   CallingConvention=CallingConvention::StdCall)]

   static bool MoveFile( String^ src, String^ dst );

 

更为详细的介绍请看:

WIN  API查看器

http://www.codeproject.com/csharp/APIBrowser.asp

 

<<A Closer Look at Platform Invoke>>

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconacloserlookatplatforminvoke.asp

 

<<Marshaling Data with Platform Invoke>>

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconmarshalingdatawithplatforminvoke.asp

 

http://www.pinvoke.net/

 

http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=75122f62-5459-4364-b9ba-7b5e6a4754fe

 

 

附录1Windows Data Type .NET Data Type 的对应关系

Windows Data Type

.NET Data Type

BOOL, BOOLEAN

Boolean or Int32

BSTR

String

BYTE

Byte

CHAR

Char

DOUBLE

Double

DWORD

Int32 or UInt32

FLOAT

Single

HANDLE (and all other handle types, such as HFONT and HMENU)

IntPtr, UintPtr or HandleRef

HRESULT

Int32 or UInt32

INT

Int32

LANGID

Int16 or UInt16

LCID

Int32 or UInt32

LONG

Int32

LPARAM

IntPtr, UintPtr or Object

LPCSTR

String

LPCTSTR

String

LPCWSTR

String

LPSTR

String or StringBuilder*

LPTSTR

String or StringBuilder

LPWSTR

String or StringBuilder

LPVOID

IntPtr, UintPtr or Object

LRESULT

IntPtr

SAFEARRAY

.NET array type

SHORT

Int16

TCHAR

Char

UCHAR

SByte

UINT

Int32 or UInt32

ULONG

Int32 or UInt32

VARIANT

Object

VARIANT_BOOL

Boolean

WCHAR

Char

WORD

Int16 or UInt16

WPARAM

IntPtr, UintPtr or Object

 

附录2: 托管数据类型与非托管数据类型对比表

Unmanaged type in Wtypes.h

Unmanaged C language type

Managed class name

Description

HANDLE

void*

System.IntPtr

32 bits

BYTE

unsigned char

System.Byte

8 bits

SHORT

short

System.Int16

16 bits

WORD

unsigned short

System.UInt16

16 bits

INT

int

System.Int32

32 bits

UINT

unsigned int

System.UInt32

32 bits

LONG

long

System.Int32

32 bits

BOOL

long

System.Int32

32 bits

DWORD

unsigned long

System.UInt32

32 bits

ULONG

unsigned long

System.UInt32

32 bits

CHAR

char

System.Char

Decorate with ANSI.

LPSTR

char*

System.String or System.StringBuilder

Decorate with ANSI.

LPCSTR

Const char*

System.String or System.StringBuilder

Decorate with ANSI.

LPWSTR

wchar_t*

System.String or System.StringBuilder

Decorate with Unicode.

LPCWSTR

Const wchar_t*

System.String or System.StringBuilder

Decorate with Unicode.

FLOAT

Float

System.Single

32 bits

DOUBLE

Double

System.Double

64 bits

 

 

附录3: C/C++C#的数据类型对应关系

C/C++

C#

HANDLE, LPDWORD, LPVOID, void*

IntPtr

LPCTSTR, LPCTSTR, LPSTR, char*, const char*, Wchar_t*, LPWSTR

String [in], StringBuilder [in, out]

DWORD, unsigned long, Ulong

UInt32, [MarshalAs(UnmanagedType.U4)]

bool

bool

LP<struct>

[In] ref <struct>

SIZE_T

uint

LPDWORD

out uint

LPTSTR

[Out] StringBuilder

PULARGE_INTEGER

out ulong

WORD

uInt16

Byte, unsigned char

byte

Short

Int16

Long, int

Int32

float

single

double

double

NULL pointer

IntPtr.Zero

Uint

Uint32

 

 

当结构体中是一个数据类型指针时,采用.net对应的数据类型替换.

当结构体中的变量是另一个结构体的指针时,采用IntPtr类型来操作.


FlashWindow

VB常用函数的说明  
======================================================================
Abs  函数 返回数的绝对值。  
And  运算符 执行两个表达式的逻辑连接。   
Array 函数 返回含一数组的 变体 。   
Asc  函数 返回字符串首字母的  ANSI  字符代码。   
赋值运算符 (
= ) 给变量或属性赋值。   
Atn  函数 返回数的反正切值。   
调用语句 将控制移交 
Sub 或 Function 过程。   
CBool 函数 返回已被转换为 Boolean 子类型的变体的表达式。   
CByte 函数 返回已被转换为字节子类型的变体的表达式。   
CCur 函数 返回已被转换为货币子类型的变体的表达式。   
CDate 函数 返回已被转换为日期子类型的变体的表达式。   
CDbl 函数 返回已被转换为双精度子类型的变体的表达式。   
Chr 函数 返回指定 ANSI 字符码的字符。   
CInt 函数 返回已被转换为整数子类型的变体的表达式。    
Class 对象 提供对已创建的类的事件的访问。   
Class 语句 声明类名   
Clear 方法 清除 Err 对象的所有属性设置。    
CLng 函数 返回已被转换为 Long 子类型的变体的表达式。   
颜色常数 颜色常数列表。   
比较常数 用于比较运算的常数列表。   
连接运算符 (
&)   强制两个表达式的字符串连接。    
Const 语句   声明用于字母值的常数。   
Cos 函数 返回角度的余弦值。    
CreateObject 函数 创建并返回对“自动”对象的引用。   
CSng 函数 返回已被转换为单精度子类型的变体的表达式。   
CStr 函数 返回已被转换为字符串子类型的变体的表达式。   
日期和时间常数 在日期和时间运算中用来定义星期几和其他常数的常数列表。   
日期格式常数 用于日期和时间格式的常数列表。   
Date 函数 返回当前系统日期。   
DateAdd 函数 返回加上了指定的时间间隔的日期。   
DateDiff 函数 返回两个日期之间的间隔。   
DatePart 函数 返回给定日期 的指定部分。   
DateSerial 函数 返回指定年月日的 日期子类型的变体 。   
DateValue 函数 返回日期子类型的变体 。   
Day 函数 返回日期,取值范围为 1 至 31。   
Description 属性 返回或者设置说明某个错误的字符串。   
Dictionary 对象 存储数据键、项目对的对象。   
Dim 语句 声明变量并分配存储空间。   
除法运算符 (
/) 两数相除并以浮点数格式返回商。   
DoLoop 语句 当条件为 True 或者当条件变为 True 时,重复一语句块。    
Empty 表示尚未初始化的变量值。   
Eqv 运算符 使两个表达式相等。   
Erase 语句 重新初始化固定数组的元素并重新分配动态数组的存储空间。   
Err 对象 含有关于运行时错误的信息。   
Eval 函数 计算并返回表达式的值。   
Execute 方法 根据指定的字符串,执行正则表达式的搜索。   
Execute 语句 执行单个或更多的指定语句。   
Exit 语句 退出 DoLoop、ForNext、 Function 或 Sub 代码块。    
Exp 函数 返回 e (自然对数的底)的多少次方。   
自乘运算符 (
^) 指数函数,幂为自变量。   
False 关键字,其值为零。   
FileSystemObject 对象 提供对计算机文件系统的访问。   
Filter 函数 根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。   
FirstIndex 属性 返回字符串匹配的位置。   
Fix 函数 返回数的整数部分。   
ForNext 语句 以指定的次数重复一组语句。   
For EachNext 语句 对于数组或集合中的每一个元素,重复一组语句。   
FormatCurrency 函数 返回的表达式为货币值格式,其货币符号采用系统控制面板中定义的。   
FormatDateTime 函数 返回格式化为日期或时间的表达式。   
FormatNumber 函数 返回格式化为数的表达式。   
FormatPercent 函数 返回格式化为百分比(乘以 100)的表达式,以 % 符号结尾。   
Function 语句 声明形成 Function 过程体的名称、参数和代码。   
GetObject 函数 从文件返回对“自动”对象的访问。   
GetRef 函数 返回对可以绑定到事件的过程的引用。   
======================================================================================= 
Global 属性 设置或返回 
Boolean 值。   
Hex 函数 返回表示数的十六进制值的字符串。   
HelpContext 属性 设置或返回帮助文件中某主题的上下文 ID。   
HelpFile 属性 设置或返回帮助文件的全路径。   
Hour 函数 返回小时数,取值范围为 0 至 23。   
IfThenElse 语句 根据表达式的值,有条件地执行一组语句。   
IgnoreCase 属性 设置或返回 
Boolean 值,指示模式搜索是否区分大小写。   
Imp 运算符 执行两个表达式的逻辑隐含。   
初始化事件  
发生在创建相关类的实例时。   
InputBox 函数 在对话框中显示提示,等待用户输入文本或者单击按钮,并返回文本框的内容。   
InStr 函数 返回一个字符串在另一个字符串中第一次出现的位置。   
InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。   
Int 函数 返回数的整数部分。   
整数除法运算符(
\) 两数相除,返回的商取其整数部分。   
Is 运算符 比较两个对象引用变量。   
IsArray 函数 返回 Boolean 值,表示变量是否为数组。   
IsDate 函数 返回 Boolean 值,表示表达式是否可以转换为日期。   
IsEmpty 函数 返回 
Boolean 值,表示变量是否已被初始化。   
IsNull 函数 返回 
Boolean 值,表示表达式是否含有无效数据 (Null)。   
IsNumeric 函数 返回 Boolean 值,表示表达式能否当作一个数,用来计算。   
IsObject 函数 返回 
Boolean 值,表示表达式是否引用了有效的“自动”对象。   
Join 函数 返回连接许多包含在一个数组中的子串而创建的字符串。   
LBound 函数 对于指示的数组维数,返回最小的可用下标。   
LCase 函数 返回已被转换为小写字母的字符串。   
Left 函数 返回字符串最左边的指定数量的字符。   
Len 函数 返回字符串中的字符数量,或者存储变量所需的字节数。   
Length 属性 返回在搜索字符串中匹配的长度。   
LoadPicture 函数 返回图片对象。仅用于 
32 位平台。   
Log 函数 返回数的自然对数。    
LTrim 函数 返回去掉前导空格的字符串副本。   
Match 对象 提供访问匹配正则表达式的只读属性。   
Matches 集合 正则表达式匹配对象的集合。   
Mid 函数 从字符串中返回指定数量的字符。   
Minute 函数 返回小时内的分钟数,取值范围为 0 至 59。   
杂项常数 不能纳入任何其他类的常数列表。   
Mod 运算符 两数相除,只返回余数。   
Month 函数 返回月份,取值范围为 1 至 12。   
MonthName 函数 返回表示月份的字符串。    
MsgBox 常数 与MsgBox 函数一起使用的常数列表。   
MsgBox 函数 在对话框中显示消息,等待用户单击按钮,并返回表示用户所击按钮的数值。    
乘法运算符 (
*) 两数相乘。    
取反运算符 (
-) 表示数值表达式的相反数。    
Not 运算符 执行表达式的逻辑“非”运算。   
Now 函数 返回当前计算机的系统日期和时间。    
Nothing 使对象变量与所有实际的对象没有任何关联。   
Null 表示变量含有无效的数据。   
Number 属性 返回或设置代表某个错误的数值。   
Oct 函数 返回表示一数的八进制值的字符串。   
On Error 语句 启用错误处理。   
运算符的优先级 表示各种 VBScript 运算符的优先顺序的列表。   
Option Explicit 语句 强制显式声明脚本中的所有变量。   
Or 运算符 执行两个表达式的逻辑“或”运算。   
Pattern 属性 设置或返回正被搜索的正则表达式的模式。   
Private 语句 声明私有变量并分配存储空间。   
PropertyGet 语句 声明在窗体属性过程中获取(返回)属性值的名称,参数和代码。   
PropertyLet 语句 声明在窗体属性过程中指定属性值的名称,参数和代码。   
PropertySet 语句 声明在窗体属性过程中设置引用到对象的名称,参数和代码。   
Public 语句 声明公有变量并分配存储空间。   
Raise 方法 产生运行时错误。   
======================================================================================
Randomize 语句 初始化随机数发生器。   
ReDim 语句 声明动态数组变量,并分配或重新分配过程级的存储空间。   
RegExp 对象 提供简单正则表达式的支持。   
Rem 语句 包含程序中的注释。   
Replace 函数 返回一个字符串,其中某个指定的子串被另一个子串替换,替换的次数也有规定。   
Replace 方法 替换在正则表达式搜索中已发现的正文。   
RGB 函数 返回表示 RGB 颜色值的数。    
Right 函数 返回字符串最右边的指定数量的字符。   
Rnd 函数 返回一随机数。   
Round 函数 返回指定位数、四舍五入的数。   
RTrim 函数 返回去掉尾部空格的字符串副本。    
ScriptEngine 函数 返回表示正在使用中的脚本语言的字符串。   
ScriptEngineBuildVersion 函数 返回使用中的脚本引擎的编译版本号。   
ScriptEngineMajorVersion 函数 返回使用中的脚本引擎的主版本号。   
ScriptEngineMinorVersion 函数 返回使用中的脚本引擎的次版本号。    
Second 函数 返回时间的秒数,取值范围为 0 至 59。   
Select Case 语句 根据表达式的值,在若干组语句中选择一组执行。   
Set 语句 将对象引用赋予变量或属性。   
Sgn 函数 返回表示数的符号的整数。   
Sin 函数 返回角度的正弦值。   
Source 属性 返回最早出错的对象或应用程序的名称。   
Space 函数 返回由指定数量的空格组成的字符串。   
Split 函数 返回下限为 0 的、由指定数量的子串组成的一维数组。   
Sqr 函数 返回数的平方根。    
StrComp 函数 返回反映字符串比较结果的值。   
字符串常数 字符串常数的列表。   
String 函数 返回重复的字符串,达到指定的长度。   
StrReverse 函数 返回一字符串,其中字符的顺序与指定的字符串中的顺序相反。   
Sub 语句 声明形成 Sub 过程体的名称、参数和代码。   
减法运算符 (
-) 求两数之差,或表示某数值表达式的相反数。   
Tan 函数 返回角度的正切值。   
终结事件  
发生在相关类的实例终结之时。   
Test 方法 根据指定的字符串,执行正则表达式的搜索。   
Time 函数 返回反映当前系统时间的日期子类型的变体。   
Timer 函数 返回时经子夜 
12:00 AM 后的秒数。   
TimeSerial 函数 返回含有指定时分秒时间的日期子类型的变体。   
TimeValue 函数 返回含有时间的日期子类型的变体。   
Trim 函数 返回去掉前导空格或末尾空格的字符串副本。   
三态常数 在代码中使用,以便表示每个显示的值。   
True 其值为 -1 的关键字。   
TypeName 函数 返回一字符串,它提供了关于变量的变体子类型信息。   
UBound 函数 返回指定维数数组的最大有效下标。   
UCase 函数 返回的字符串已经被转换为大写字母。   
Value 属性 返回在搜索字符串中已发现匹配的值或正文。   
VarType 常数 定义变体子类型的常数列表。   
VarType 函数 返回标识变体子类型的数值。   
VBScript 常数 在 VBScript 中提供不同种类的常数。   
Weekday 函数 返回表示星期几的数值。   
WeekdayName 函数 返回表示星期几的字符串。   
WhileWend 语句 只要给定的条件为 True,便执行一串语句。   
With 语句 对单个的对象执行一串语句。   
Xor 运算符 执行两个表达式的逻辑“异或”运算。   
Year 函数 返回表示年份的数值。   
VB中整除运算符 
\ 与取整函数 INT 的作用是否相同 

性质不同。一个是运算符,一个是函数。   
整除,顾名思义,有除法在里面,而取整只是删除零头而已。   
但它们在某种情况下可以相互替换,如:   
3\2=Int(3/2)   
Int(10.11)=10.11\1  

你可能感兴趣的:(Win32)