Command line arguments & Условная компиляция

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

ozyabkin
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 16.11.2005 (Ср) 0:02

Command line arguments & Условная компиляция

Сообщение ozyabkin » 25.03.2006 (Сб) 6:02

Подскажите, пожалуйста, как осуществить в VB NET условную компиляцию, как в VB6. Заданы две константы DEMOVERSION и DLLCHECK. Нужно в зависимости от выбранной в командной строке константы выбирать алгоритм расчета.
У меня почему-то код игнорирует заданные константы условной компиляции.
Код: Выделить всё
' Руководство к Озадаченному
' Авторское право © 1997 Desaware Inc Все права защищены

' Варианты, поддержавшие этим модулем включают:
' DEMOVERSION - Проверяет хорошо только в среде VB
' DLLCHECK - Требует файл лицензии в среде VB
Imports System.IO
Module Licenser
    ' Функция GetModuleFileName отыскивает полный путь и имя файла
    ' для файла, содержащего указанный модуль.
    ' Windows 95/98/Me: функция GetModuleFilename отыскивает длинные имена
    ' файлов, когда номер версии приложения больше чем или равен 4.00,
    ' и длинное имя файла доступно. Иначе, это возвращает только 8.3 имен
    ' файла формата.
    Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Integer, ByVal lpFileName As String, ByVal nSize As Integer) As Integer
    ' Функция GetModuleHandle отыскивает дескриптор для указанного модуля,
    ' если файл отображен в адресном пространстве процесса запроса.
    Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Integer

    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer


#If DEMOVERSION Or DLLCHECK Then
    ' Возвратите Истину если
    ' Демонстрационная версия может работать на любой VB платформе, дизайне или времени выполнения
    Public Function IsVBEnvironment() As Boolean
        Dim thismod As Integer
        Dim thisfile, basename As String
        Dim thispos As Short
        Dim thischar As String

        On Error GoTo nogo
        thismod = GetModuleHandle("DSALib.dll")
        thisfile = New String(Chr(0), 262)
        Call GetModuleFileName(thismod, thisfile, 261)
        thisfile = Left$(thisfile, InStr(thisfile, Chr(0)) - 1)
        thispos = Len(thisfile)
        Do
            thischar = Mid$(thisfile, thispos, 1)
            If thischar = "\" Or thischar = ":" Then Exit Do
            thispos = thispos - 1
        Loop While thispos > 0
        basename = LCase$(Mid$(thisfile, thispos + 1))
        If basename = "vb.exe" Or basename = "vb32.exe" Or basename = "vb6.exe" Or basename = "devenv.exe" Then
            IsVBEnvironment = True
        End If
        Exit Function
nogo:
    End Function
#End If

    Public Function VerifyLicense() As Boolean
        Static PriorVerification As Boolean
        Static VerifiedOnce As Boolean
        ' Быстро вернуться при втором обращении
        If PriorVerification Then
            VerifyLicense = VerifiedOnce
            Exit Function
        End If
        PriorVerification = True
        ' Значение по умолчанию нет
        VerifiedOnce = False
        VerifyLicense = False
#If DEMOVERSION Then
        Dim F As frmAbout
        F = New frmAbout
        If IsVBEnvironment() Then
            ' Вывести информационный экран
            F.MessageType = 0
            F.ShowDialog()
            VerifiedOnce = True
        Else
            ' Вывести экран отказа лицензии
            F.MessageType = 1
            F.ShowDialog()
            VerifiedOnce = False
        End If
        VerifyLicense = VerifiedOnce
#End If
#If DLLCHECK Then
        If IsVBEnvironment() Then
        ' Здесь проверить DLL или объект.
        ' Если не найдено, вернуть VerifyLicense = False
        ' VerifiedOnce = False

            Dim sRet As String
            ' Fill sRet with Null Chars
            sRet = New String(Chr(0), 255)
            ' Get data from INI file
            sRet = Left$(sRet, GetPrivateProfileString("Settings", "lic", "0", sRet, Len(sRet), My.Application.Info.DirectoryPath & "\lic.ini"))
            If sRet = "0" Then
                Dim F As frmAbout
                F = New frmAbout
                F.MessageType = 1
                F.ShowDialog()
                If LCase(F.MessageCode) = "123" Then
                    WritePrivateProfileString("Settings", "lic", "1", My.Application.Info.DirectoryPath & "\lic.ini")
                    VerifiedOnce = True
                Else
                    VerifiedOnce = False
                End If
                F.Close()
            Else
                VerifiedOnce = True
            End If
        Else
            VerifiedOnce = True
        End If
        VerifyLicense = VerifiedOnce
        Exit Function
#End If
    End Function
End Module
Вложения
!Лицензирование ActiveX.zip
пример на VB6
(22.93 Кб) Скачиваний: 56

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 124

    TopList