HELP!!! Как создать прогу, компилирующую EXE!?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Диманониксум
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 07.07.2005 (Чт) 18:49
Откуда: Из Твери

HELP!!! Как создать прогу, компилирующую EXE!?

Сообщение Диманониксум » 07.07.2005 (Чт) 18:51

:cry: Ну и как мне это сделать? HELP!!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 07.07.2005 (Чт) 19:13

Выпить йаду.
Говорят помогает.

Компилириющую EXE из чего? Из воздуха?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 07.07.2005 (Чт) 21:50

А, кстати, вопрос интересный... :?
Там както надо DLL припаять и что то еще... :lol: :lol:
Sorry за свой разговорный стиль речи и за тупость :oops:
Это не читайте! Это спам! :D

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 08.07.2005 (Пт) 0:03

На VB .NET можно сделать прогу компилирущую код, который может создаваться в процессе работы программы(я своими глазами видел)
На VB6 легче написать интерпретатор, который будет выполнять твой код.

Диманониксум, что ты хотел, чтобы тебе ответели?

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 08.07.2005 (Пт) 9:28

Компилить в EXE, мягко говоря - "замучаешся". Но можешь сделать выполение кода из текста.
:roll:
Код: Выделить всё
Dim SC As Object
Private Sub Form_Load()
Set SC = CreateObject("MSScriptControl.ScriptControl")
SC.Language = "VBSCRIPT"
SC.AddCode "msgbox(""ss"")"
End Sub


Вот самый просто вариант. Если захочешь свойства и методы объекта.

То подключи Microsoft Script Control 01 в References.

+ Если нужно будет объёмный код исполнять, грузи его из текстовика. :roll:

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 09.07.2005 (Сб) 22:51

ALX_2002, огромное спасибо, незнал такого способа

В свою очередь добавлю, компилируешь следующий экзешник:
Код: Выделить всё
Option Explicit

Public Type Section
    ObjectName As String * 8
    VirtualSize As Long
    SectionRVA As Long
    PhysicalSize As Long
    PhysicalOffset As Long
    Reserved As Long
    ObjectFlagus As Long
End Type

Dim SC As Object

Sub ExecCode(ByVal stCode As String)
    SC.AddCode stCode
End Sub

Private Sub Main()
Dim FileName As String
Dim PE As Long
Dim PEstr As String * 4

Dim NumOfObjects As Integer
Dim NTHeaderSize As Integer
Dim SectionName As String * 8
Dim SizeHeader As Integer
Dim FirstSection As Integer
Dim LastSection As Integer
Dim secLastSection As Section
Dim EndExe As Long

Dim buf As String
Dim i As Long
Dim LenFile As Long

    Set SC = CreateObject("MSScriptControl.ScriptControl")
    SC.Language = "VBSCRIPT"
   
    If Right(App.Path, 1) = "\" Then
        FileName = App.Path & App.EXEName & ".exe"
    Else
        FileName = App.Path & "\" & App.EXEName & ".exe"
    End If
   
   Open FileName For Binary Access Read Shared As #1
    Get #1, &H3C + 1, PE
    Get #1, PE + 1, PEstr
   If PEstr <> "PE" & Chr(0) & Chr(0) Then
    PE = 0
   End If

If PE = 0 Then Exit Sub
       
        Get #1, PE + &H6 + 1, NumOfObjects
        Get #1, PE + &H14 + 1, NTHeaderSize
       
    SizeHeader = NTHeaderSize + &H18
    FirstSection = SizeHeader + PE
    LastSection = FirstSection + (NumOfObjects - 1) * &H28

        Get #1, LastSection + 1, secLastSection
        EndExe = secLastSection.PhysicalOffset + secLastSection.PhysicalSize
        LenFile = LOF(1)
        If EndExe <> LenFile Then
                buf = Space(LenFile - EndExe)
                Get #1, EndExe + 1, buf
                ExecCode buf
        End If
   Close #1
End Sub


Далее, в коде генерирующей программы в конец этого, существующего, экзешника записываешь:
Код: Выделить всё
    Open FileName For Binary As #1
        Put 1, LOF(1) + 1, "n=5" & vbnewline & "msgbox n"
    Close #1


ЗЫ
Проверено работает на 100%
Первый код писался мной давно и только для мирных целей. Его можно упростить.


Вернуться в Visual Basic 1–6

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

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

    TopList