免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

前置宣告???編譯預處理??

#If Win32 Then
      Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x _
      As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As _
      Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As _
      Long, ByVal dwRop As Long) As Long
      #Else
      Declare Function BitBlt Lib "GDI" (ByVal hDestDC%, ByVal X%, ByVal _
      Y%, ByVal nWidth%, ByVal nHeight%, ByVal hSrcDC%, ByVal XSrc%, _
      ByVal YSrc%, ByVal dwRop&) As Integer
      #End If



   大家都知道C语言中的编译预处理,这是一项十分实用的功能。其实VB中也有类似于C语言编译预处理中的条件编译语句——#If语句。

       语法如下:

        #If 条件 Then

        程序语句

        [#ElseIf 条件n Then

        程序语句]

        [#Else

        程序语句]

        #End If

        大家用IF语句去理解这个语句就行了,不过这个语句是告诉编译器编译哪一部分的代码,条件编译通常用来编译不同平台上的同一个程序。也可以用来避免调试程序代码出现在可执行程序中。


#Const用于在编译时被编译器使用定义一个编译变量,它要与#If ... 语句一起使用,从而决定哪些代码被包含于编译后的程序中。在下面的代码中,第二个MsgBox语句被完整地从代码中移去,这就使编译后的程序变得小了些。

    #Const DEBUG_VERSION = True
   
    #If DEBUG_VERSION Then
        MsgBox "This is a debug version"
    #Else
        MsgBox "This is the final version"
    #End If

   Const用于定义一个数值,当遇到它时,Visual Basic将替代为常量符号。比如,下面的代码使用一个常量来创建一个更易读的信息。通常,常量要远远前于使用它的代码之前。

    Const MSG = "Hello"
        :
    MsgBox MSG

   注意,你不能按照这种方法使用#Const,比如,下面的代码是错误的:

    #Const MSG = "Hello"
        :
    MsgBox MSG

   最后请注意,在编译时Const数值是不明确的,所以,它们都是默认数值。比如,一个Boolean常量在编译时没有初始化,默认是False,即使你定义常量的数值为True!猜一猜执行下面的代码会显示什么?试一试然后看看你是否想正确了:

    Private Sub Form_Load()
    #Const A = True
    Const B = True
   
        #If A Then
            MsgBox "A is True"
        #Else
            MsgBox "A is False"
        #End If
   
        #If B Then
            MsgBox "B is True"
        #Else
            MsgBox "B is False"
        #End If
   
        If B Then
            MsgBox "B is True"
        Else
            MsgBox "B is False"
        End If
    End Sub

   所以,编程原则是:

与#If一起配合使用#Const
与If一起配合使用Const
不要混和使用2者



#If...#Then...#End If  
这个不是用于不同的硬件平台的,
是用在不同操作系统的编译.(软件平台)

不同的硬件应该用普通的if语句就可以了



预处理语句是在生成exe前就要被执行判断的。。



就比如
a=20
#If a>0 Then
    print "aaa"
#Else
    print "bbb"
#End If
这样就会在窗体上输出 bbb,去掉了#号后,反而是输出 aaa,请问这是怎么回事?这里的#号有什么作用的?我在网上搜索不到这方面的教程啊。还望各位前辈多指教,谢谢!




比如
#Const a = 20
#If a > 0 Then
    Print "aaa"
#Else
    Print "bbb"
#End If
这个是编译的时候进行的判断...这样你可以写一个代码然后编译时改变#const的某个值就可以编译出不同的程序了...以适应不同的系统或者需求...






#Const和#If是一个性质


#Const 指令
用来定义 Visual Basic 的条件编译常数。
语法
#Const constname = expression
#Const 编译指令的语法具有以下几个部分:
constname:必要;Variant (String)。常数;名称要遵守变量命名的约定。
expression:必要。文字、其他的条件编译常数或包含除了 Is 以外的算术或逻辑运算符的任意组合。
说明
条件编译常数在其出现的模块中总是 Private。不可能利用 #Const 指令建立 Public 编译常数。Public 编译常数只能在用户接口中建立。
在 expression 中只能使用编译常数及文字。使用一个用 Const 定义的标准常数,或者使用一个未定义的常数,都会导致错误发生。反之,用 #Const 关键字定义的常数也只能用于条件编译。
不管条件编译常数在程序中的位置如何,都总是在模块级别中进行计算。
返回列表