Загрузка кода в EXE и выполнение его

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

Загрузка кода в EXE и выполнение его

Сообщение Strayd » 27.08.2003 (Ср) 13:30

В старом Qbasik'е можно было сделать отдельный файл с кодом и выполнять его из скомпилированного EXE файла командой Shell.
А как теперь в Visual Basike открывать файлы с кодом ведь теперь Shell- зто запуск программы.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 27.08.2003 (Ср) 13:41

Используй Microsoft Script Control

Strayd
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 14.07.2003 (Пн) 4:22

Re: Загрузка кода в EXE и выполнение его

Сообщение Strayd » 27.08.2003 (Ср) 13:44

Strayd писал(а):А что это такое, просто можно и самому сделать что-то вроде HTML но не хочеться возиться, а чужие контролы брать тоже не хочеться, вот бы как раньше!!!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 27.08.2003 (Ср) 22:42

ЭЭээ ... так это в ВБ возможно???

Не хочу показаться ..слишком ... нехорошим ... но люди ... меня ето тоже заинтересовало, можно поподробнее с этого момента :)

Так ведь в ЕХЕ проге можно сделать расширение функциональности, не ломая саму прогу ... только позаботившись о способности ЕХЕ-шки читать этот дополнительный файлик :)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Strayd
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 14.07.2003 (Пн) 4:22

Сообщение Strayd » 28.08.2003 (Чт) 3:30

Возможно всё, но вот сколько времени надо....
Есть три пути:
1.Создавать свой язык.
Читать построчно сравнивать и выполнять
2.Использовать сторонние контролы.
Язык будет знаком, но к контролу есть всегда триал и вообще таскатьего за собой...
3.Искать другой способ на основе внутренней особенности языка.

Pivusik
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 27.08.2003 (Ср) 13:25
Откуда: Новый Уренгой

Сообщение Pivusik » 28.08.2003 (Чт) 7:00

А можно использовать смд или бат :=)
Всмысле пусть пользователь пише чтохочет а связоваться с твоей прогой бедет или комманд$ или по ДДЕ... можно просто бонально фалик создать а ты читай когда что то в нем поменялось :=)
©Wind

Strayd
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 14.07.2003 (Пн) 4:22

Сообщение Strayd » 28.08.2003 (Чт) 7:44

Бат это командный сценарий Ms-dos а я имею-виду что что программа читает какой-либо файл с исходными кодами на Visual Basic или на своём языке и исполняет его.

STING
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 19.06.2003 (Чт) 17:20

Re: Загрузка кода в EXE и выполнение его

Сообщение STING » 28.08.2003 (Чт) 7:58

Strayd писал(а):В старом Qbasik'е можно было сделать отдельный файл с кодом и выполнять его из скомпилированного EXE файла командой Shell.
А как теперь в Visual Basike открывать файлы с кодом ведь теперь Shell- зто запуск программы.


Вот нечто подобное, не знаю работает или нет.
Использование текста в качестве кода программы
В данном примере вам понадобятся следующие элементы: ComboBox, TextBox, Label, CommandButton. В ComboBox программа добавляет так называемые шаблоны, Label отображает текущее состояние выполнения кода, в TextBox'е содержится непосредственно текст, являющийся кодом программы, ну а CommandButton... и так понятно.
Как ни жаль, но всех возможностей функции EbExecuteLine я не знаю. Как говорится, вам и карты в руки.
Чуть не забыл. Вам понадобится дополнительный модуль в вашей программе.
Public Function secret() As String
secret = "this is a secret subroutine"
End Function
Public Sub secret2()
MsgBox "this is a secret subroutine 2"
End Sub

'КОД ФОРМЫ

Option Compare Text
Option Explicit

Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Foo1 As Long, ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

' For VB5 IDE
'Declare Function EbExecuteLine Lib "vba5.dll" (ByVal pStringToExec As Long, ByVal Foo1 As Long, ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

' FOR Access 97/VBE.dll clients like Word 97 and Excel 97
'Declare Function EbExecuteLine Lib "vba332.dll" (ByVal pStringToExec As Long, ByVal Foo1 As Long, ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

Function FExecuteCode(stCode As String, Optional fCheckOnly As Boolean) As Boolean
FExecuteCode = EbExecuteLine(StrPtr(stCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function

Private Sub Combo1_Click()
Text1.Text = Combo1.List(Combo1.ListIndex)
End Sub

Private Sub Command1_Click()
Dim res As Boolean
res = FExecuteCode(Text1.Text)
Label1.Caption = "Status = " & res
End Sub

Private Sub Form_Load()
Combo1.AddItem "?secret"
Combo1.AddItem "msgbox secret"
Combo1.AddItem "secret2"
Combo1.AddItem "For x=0 to 5:?" & Chr$(34) & "hello " & Chr$(34) & "&x:next:beep"
Combo1.AddItem "sendkeys " & Chr$(34) & "{TAB}" & Chr$(34) & ":sendkeys " & Chr$(34) & "{up}" & Chr$(34)
Combo1.AddItem "shell " & Chr$(34) & "calc.exe" & Chr$(34) & ",vbNormalFocus"
Combo1.AddItem "shell " & Chr$(34) & "c:\windows\explorer.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" & Chr$(34) & ",vbNormalFocus"
Combo1.AddItem "form1.text1.visible=false"
Combo1.AddItem "form1.text1.visible=true"
Combo1.AddItem "form1.combo1.listindex=1"
Combo1.AddItem "msgbox app.Title"
Combo1.AddItem "form1.combo1.listindex=1:form1.command1.value=true"
Combo1.ListIndex = 0
Show
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.08.2003 (Чт) 8:41

Да, но это язык в языке. Если, к примеру, у нас есть переменная в проге, то команда fexecutecode("msgbox myvar", false) вызовет пустой месседжбокс, поскольку "на том уровне" переменная myvar не определена. Пример:
Код: Выделить всё
Option Explicit

Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As String, ByVal Foo1 As Long, ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

Private Sub Command1_Click()
  Dim a As String
  a = "На уровне процедуры переменная строковая!"
  MsgBox a
 
  EbExecuteLine StrConv("dim a as long", vbUnicode), 0&, 0&, 0&
  EbExecuteLine StrConv("a=5", vbUnicode), 0&, 0&, 0&
  EbExecuteLine StrConv("msgbox ""А туточки она лонговая, и равна "" & a", vbUnicode), 0&, 0&, 0&
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 19

    TopList