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
Exit Sub

ShellError:
MsgBox "Erro durante execução '" & program_name & "'" & vbCrLf & Err.Description
End Sub

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..