?? modmain.bas
字號:
Attribute VB_Name = "ModMain"
' -------------------------------------
' VB2Cpp - Visual Basic to C++ translator.
' Copyright (C) 2002-2003 Franck Charlet.
'
' VB2Cpp is free software; you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation; either version 2, or (at your option)
' any later version.
'
' VB2Cpp is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with VB2Cpp; see the file Copying.txt. If not, write to
' the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
' Boston, MA 02111-1307, USA.
' -------------------------------------
' Main module
' -------------------------------------
Option Explicit
' --- Version number --- '
Global Const APPVersion = "0.8.67"
' --- Main program --- '
Public Sub Main()
SetEnv ' Create some variables
ReadPrefs ' Fill preferences
InitGUI ' Launch GUI
End Sub
' --- Perform project conversion --- '
Public Sub DoConversion()
Dim FirstProjectElement As String
Dim VB4Prj As Boolean
ReadPrefs
AlloctempFile
If InitConversionContext() = False Then GoTo NoContext
WriteText "------------------------------------------------------------------------\n"
WriteText "Project to convert: " & ProjectName & "...\n\n"
WriteText "Generating temporary project file..."
StatusBarSetText hStatusBar, "Converting..."
' Convert VB project file into ini file
WriteOut "[VBProject]\n"
ProjectMem = LoadFileIntoMemory(FileInput)
If ProjectMem <> 0 Then
TempProjectToChange = String(FileReaded, " ")
CopyMemory ByVal TempProjectToChange, ByVal ProjectMem, FileReaded
FreeMem ProjectMem
i = 0
' Save first found project element (VB4)
FirstProjectElement = UCase(left(TempProjectToChange, 7))
' Convert module= to modulex=
Do While InStr(1, TempProjectToChange, "module=", vbTextCompare) <> 0
TempProjectToChange = Replace(TempProjectToChange, "module=", "module" & i & "=", , 1, vbTextCompare)
i = i + 1
Loop
WriteFile FileOutput, ByVal TempProjectToChange, Len(TempProjectToChange), ProjectBytesW, 0
Else
WriteText "\n*** Fatal error: can't create temporary file.\n"
End If
WriteText " Ok.\n"
If FileOutput <> 0 Then CloseHandle FileOutput
FileOutput = 0
WriteText "Checking project validity..."
' Check if project starts with main()
VB4Prj = False
ProjectStartupProc = IniReadKey("VBProject", "Startup", TempProjectName)
If lstrlen(ProjectStartupProc) = 0 Then
' Might be a VB4 project
' (if starting with a module then it's a sub main())
If FirstProjectElement <> "MODULE=" Then
WriteText "\n*** Fatal error: project must start with main().\n"
GoTo StopAll
End If
VB4Prj = True
Else
If lstrcmpi(ProjectStartupProc, "SUB MAIN") <> 0 Then
WriteText "\n*** Fatal error: project must start with main().\n"
GoTo StopAll
End If
End If
' Read project informations
' (No project type for VB4 projects)
If VB4Prj = False Then
ProjectType = IniReadKey("VBProject", "Type", TempProjectName)
If lstrlen(ProjectType) = 0 Then
WriteText "\n*** Fatal error: can't retrieve project type.\n"
GoTo StopAll
End If
End If
' Single threading model required (no modules/forms system)
' (VB4 projects don't handle such things)
If VB4Prj = False Then
If IniReadKey("VBProject", "MaxNumberOfThreads", TempProjectName) <> "1" Then
WriteText "\n*** Fatal error: can't convert multi-threading based projects.\n"
GoTo StopAll
End If
End If
' Retrieve general informations
ProjectMajor = IniReadKey("VBProject", "MajorVer", TempProjectName)
ProjectMinor = IniReadKey("VBProject", "MinorVer", TempProjectName)
ProjectRevision = IniReadKey("VBProject", "RevisionVer", TempProjectName)
WriteText " Ok.\n"
InitWorkingArrays
NbrErrors = 0
NbrWarnings = 0
StatsLines = 0
ForTempUVarNbr = 0
ForTempLVarNbr = 0
TemporaryVars = 0
TemporaryStrArgs = 0
TemporarySelects = 0
LiteralStrVar = 0
RefVariablesWORD = 0
RefVariablesDWORD = 0
RefVariablesCHAR = 0
RefVariablesBOOL = 0
RefVariablesBYTE = 0
RefVariablesDOUBLE = 0
RefVariablesFLOAT = 0
i = 0
' Get project title
ProjectTitle = IniReadKey("VBProject", "Title", TempProjectName)
' Fallback
If lstrlen(ProjectTitle) = 0 Then ProjectTitle = RemoveFileExtension(GetFileName(ProjectName))
' Retrieve modules informations
ModuleName = IniReadKey("VBProject", "Module" & i, TempProjectName)
If lstrlen(ModuleName) = 0 Then
WriteText "\n*** Fatal error: no modules in project.\n"
GoTo StopAll
End If
WriteText "Retrieving referenced modules..."
Do While lstrlen(ModuleName) <> 0
ModuleNameArray() = Split(ModuleName, ";")
If UBound(ModuleNameArray()) <> 1 Then
WriteText "\n*** Fatal error: mangled module reference.\n"
GoTo StopAll
End If
ModuleEmptyName = Trim(ModuleNameArray(1))
If lstrlen(ModuleEmptyName) <> 0 Then
ModulesArray(UBound(ModulesArray())) = ModuleEmptyName
ReDim Preserve ModulesArray(0 To UBound(ModulesArray()) + 1)
End If
i = i + 1
ModuleName = IniReadKey("VBProject", "Module" & i, TempProjectName)
Loop
' Retrieve .res file
ResourceName = IniReadKey("VBProject", "ResFile32", TempProjectName)
DeleteFile TempProjectName
WriteText " Ok.\n"
ReDim ModulesArrayConversion(UBound(ModulesArray()))
CreateModalDialog 402, 244, hWndDialog, AddressOf SelectModsProc, WS_BORDER Or WS_CAPTION Or WS_SYSMENU
If ModulesChoice = MODULES_CANCEL Then GoTo StopAll
' Initialize output files
Ticks = (GetTickCount \ 1000)
OutHeaderName = Mid(ProjectName, 1, Len(ProjectName) - 3) & "cpp"
OutHeaderHandle = OpenFileW(OutHeaderName)
If OutHeaderHandle = -1 Then
WriteText "\n*** Fatal error: can't open output project file.\n"
GoTo StopAll
End If
OutHTypeHandle = OpenFileW(Mid(ProjectName, 1, Len(ProjectName) - 4) & "type.h")
If OutHTypeHandle = -1 Then
WriteText "\n*** Fatal error: can't open output project file header.\n"
GoTo StopAll
End If
OutHConstHandle = OpenFileW(Mid(ProjectName, 1, Len(ProjectName) - 4) & "const.h")
If OutHConstHandle = -1 Then
WriteText "\n*** Fatal error: can't open output constants file header.\n"
GoTo StopAll
End If
OutHVarHandle = OpenFileW(Mid(ProjectName, 1, Len(ProjectName) - 4) & "var.h")
If OutHVarHandle = -1 Then
WriteText "\n*** Fatal error: can't open output variables file header.\n"
GoTo StopAll
End If
' Remove obsolete VC files
DeleteFile Mid(ProjectName, 1, Len(ProjectName) - 3) & "dsp"
DeleteFile Mid(ProjectName, 1, Len(ProjectName) - 3) & "dsw"
' Create new VC project file
OutCPrjHandle = OpenFileW(Mid(ProjectName, 1, Len(ProjectName) - 3) & "dsp")
If OutHVarHandle = -1 Then
WriteText "\n*** Fatal error: can't open output Visual C++ project file.\n"
GoTo StopAll
End If
' Create new VC workspace file
OutCPrjWorkSpcHandle = OpenFileW(Mid(ProjectName, 1, Len(ProjectName) - 3) & "dsw")
If OutCPrjWorkSpcHandle = -1 Then
WriteText "\n*** Fatal error: can't open output Visual C++ workspace file.\n"
GoTo StopAll
End If
WriteConstHeader
WriteVarHeader
WriteHeaders
WriteTypeHeader
WriteText "\nPass 1...\n"
AddCLibFunctions
' First pass: retrieve the constants/variables/subs/functions/user types/enums definitions
For i = 0 To UBound(ModulesArray()) Step 1
If lstrlen(ModulesArray(i)) <> 0 Then
CurrentModuleName = ModulesArray(i)
If InStr(1, CurrentModuleName, "\") <> 0 Then
OriginalModuleName = CurrentModuleName
CurrentModuleName = "\" & CurrentModuleName
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -