Compilando um projeto em tempo de execução no VB
Que tal criar um projeto para compilar outro projeto. É isso mesmo !!!. Vamos mostrar um projeto que ao ser executado irá compilar e a seguir executar outro projeto. Como ??? Bem, Siga as instruções...
Criando o projeto que será compilado - DESTINO.VBP
Salve o projeto com o nome de destino.vbp.
Criando o projeto que irá compilar e executar o projeto destino.vbp - COMPILA.VBP
Insira o código abaixo na secção General Declarations do formulário:
Option Explicit Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal_ bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal_ dwMilliseconds As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Const SYNCHRONIZE = &H100000 Private Const INFINITE = -1& |
Agora insira o seguinte código no evento click do botão compila:
' Inicia o compilador Private Sub cmdRun_Click() Const COMPILER = "C:\Arquivos de Programas\Microsoft Visual Studio\Vb98\Vb6.exe" Const PROJECT_NAME = "Destino" Dim project_path As String Dim project_vbp As String Dim project_exe As String Dim cmd As String 'Pega o nome do projeto project_path = App.Path If Right$(project_path, 1) <> "\" Then project_path = project_path & "\" project_vbp = project_path & PROJECT_NAME & ".vbp" project_exe = project_path & PROJECT_NAME & ".exe" 'Compoe o comando para compilar cmd = """" & COMPILER & """ /MAKE """ & project_vbp & """" 'Excecute o comando e aguarda ShellAndWait cmd 'Executa o programa recem compilado cmd = """" & project_exe & """" ShellAndWait cmd cmdRun.Caption = "COMPILADO" End Sub |
Abaixo o código da função
' inicia o programa e aguarda o seu termino Private Sub ShellAndWait(ByVal program_name As String) Dim process_id As Long Dim process_handle As Long ' Inicia o programa On Error GoTo ShellError process_id = Shell(program_name, vbNormalFocus) On Error GoTo 0 ' Oculta Me.Visible = False DoEvents ' aguarda o programa terminar ' pega o numero do manipulador process_handle = OpenProcess(SYNCHRONIZE, 0, process_id) If process_handle <> 0 Then WaitForSingleObject process_handle, INFINITE CloseHandle process_handle End If Me.Visible = True |
Salve o projeto com o nome de compila.vbp.
Executando o projeto compilador - Compila.vbp
Agora ao executar o projeto compila.vbp e clicar no botão - Compila o projeto destino.vbp será compilado e executado.
Tchau..