компиляция Exe-шника |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
компиляция Exe-шника |
Георгий |
8.01.2009 11:02
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
добрый день!
возможно ли такое: 1) имеется исходник кода, необходимо чтобы при его открытии он сам компилировался (не нажимая F9) (ВАЖНО чтобы он проверял TPU файлы привазаные к нему!!!!). 2) если сохранить этот файл в exe то при его запуске он компилировался и запускался (ВАЖНО чтобы он проверял TPU файлы привазаные к нему!!!!). |
volvo |
8.01.2009 11:24
Сообщение
#2
|
Гость |
И зачем это тебе, можно уточнить? Саму задачу озвучь, возможно она решается более стандартными средствами.
Потому как для решения того, что ты написал, надо как минимум знать, ЧЕМ будет открываться исходник... Вот я, например, открываю SciTE-ом, хоть занажимайся F9 - ничего не будет компилироваться. Хотя нажатие на другую клавишу (или выбор пункта меню) прекрасно компилирует/билдит программу... |
Георгий |
8.01.2009 12:12
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
в общем я написал программу для построения графиков. ввод ф-ии осуществляется непосредственно в исходнике, я хочу скрыть код программы, для этого я создал модуль usONE.pas в котором написал ф-ию в которой будет написана ф-ия, создал 2ой модуль usWTO.pas в котором скрыты основные процедуры и ф-ии, он будет откомпилирован паскалем в TPU файл, после чего исходник удалю, также осталась часть программы от Begin до end. в которой происходит вызов всех процедур и 2х модулей.
Планирую написать программу загрузчик которая выполняет: 1) маленькую программу для изменения ф-ии в usONE.pas пользователь вводит ф-ию в формат string после чего она как текстовый файл сохрананяется в usONE.pas 2) после чего программа загрузчик после завершения работы маленькой программы должна открывать программу которая, как раз, и должна компилироваться сама в начале (тем самым она обновляет usONE.pas в котором будет уже написана новая информация о ф-ии) желательно сама запускаться и строить график. тобишь 1) пользователь запускает файл 2) открывается прога 1 которая просит ввести ф-ию, после ввода записывает ф-ию в usONE.pas закрывается и запускает 3) прогу 2 которая читает TPU с веденой в него ф-ей, сама запускается и строит график Сообщение отредактировано: Георгий - 8.01.2009 12:13 |
volvo |
8.01.2009 12:33
Сообщение
#4
|
Гость |
Не мучайся... Напиши парсер, который позволит вычислять значение функции, заданной строкой. То есть, пользователь вводит функцию в строку, и твой парсер вычисляет значение этой функции (что-то подобное на форуме выкладывалось, см. в поиске по ключевому слову "интерпретатор"). Тогда не понадобится ничего "скрывать", достаточно будет только TPU-файла, в котором будут необходимые средства для вычисления значения функции.
"Скрывать" - в кавычках. Потому, что это не сокрытие. Кому надо - все равно сломает, а себе ты наживешь проблемы. |
Георгий |
8.01.2009 12:57
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
я нашел интерпретатор http://pascal.sources.ru/parsing/swexpr.htm он находится в модуле, как подключить этот модуль то?
вот имеется строка и как ее прогнать через этот модуль то?? Сообщение отредактировано: Георгий - 8.01.2009 13:15 |
volvo |
8.01.2009 13:22
Сообщение
#6
|
Гость |
Цитата мб есть OBJECTS.TPU? Есть. По крайней мере, должен быть, в папке TP\UNITS. Если у тебя появляется такая ошибка, значит, версия компилятора, на которой создан этот самый Objects.TPU, не совпадает с той версией, которая используется тобой для компиляции проекта (как пример - файл OBJECTS.TPU из пакета TP7 и использование TP6 для компиляции программы выдаст тебе именно такую ошибку).Проверил программу по ссылке. За исключением того, что Integer надо заменить на LongInt, у компилятора (TP 7.0) больше нет никаких претензий. Скачай себе нормальный дистрибутив Паскаля, установи, и у тебя ошибка тоже пропадет... Цитата вот имеется строка и как ее прогнать через этот модуль то?? Там есть пример использования - программа INT.PAS |
Георгий |
8.01.2009 13:32
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
модуль стал нормально компилироваться
млин не пруха пример не работает вылазит ошибка Type mismatch на GetVariable:=GetX; |
volvo |
8.01.2009 13:42
Сообщение
#8
|
Гость |
Ты сообщения мои вообще читаешь? Я же написал:
Цитата За исключением того, что Integer надо заменить на LongInt , ну так замени:{$F+} |
Георгий |
8.01.2009 14:17
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
млин я не могу понять пример, я понимаю только где происходит ввод ф-ии а где выводится значение ф-ии не могу понять.
вот скажем прога:
так шоли? чтобы ввести x и y надо: AddVariable('X',1); GetVariable:=GetX; AddVariable('Y',2); GetVariable:=GetY; при таком раскладе он читает только y ((( тобишь считает x за y что нужно исправить чтобы он читал и x и y ?? Сообщение отредактировано: Георгий - 8.01.2009 14:36 |
Георгий |
8.01.2009 15:04
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
Please help!
|
volvo |
8.01.2009 17:01
Сообщение
#11
|
Гость |
Попробуй вот так:
{$F+} |
Георгий |
8.01.2009 17:08
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
ААААААААААААААААААААААААААААААААААААААААААААААААААА
СПАСИБА!! очень классно!!! все работает!!! не представляешь как помог! Добавлено через 1 мин. давай кошелек webmoney положу 50wmr |
Георгий |
8.01.2009 21:08
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
млин опять ничего не работает
короче у меня есть ф-ия "BBog_xy" в которую вводится значения x y и по сути она должна вставлять их в введеную ф-ию и выводить ответ вот тут то и возникла проблема. к ней идет 100500 запросов а прогонять 100500 раз модуль не возможно. как вот сделать чтобы скажем процедурка "TEST" для ввода ф-ии сохраняла результат из переменных x y (к примеру было введено "x+y" и она должна хранить этот результат !не в формате стринг!, без знания значений x y. а ф-ия "BBog_xy" зная значения x y както обращалась к гдето хранившемся результате из процедурки "TEST" подставляла значения x y и выводила ответ. ваще такое возможно? |
volvo |
8.01.2009 21:57
Сообщение
#14
|
Гость |
Цитата процедурка "TEST" для ввода ф-ии сохраняла результат из переменных x y (к примеру было введено "x+y" и она должна хранить этот результат !не в формате стринг!, без знания значений x y. Ты для себя-то реши, в каком формате и что ты хочешь хранить, а то получается "пойди туда, не знаю куда, принеси то, не знаю что..." (С)а ф-ия "BBog_xy" зная значения x y както обращалась к гдето хранившемся результате из процедурки "TEST" подставляла значения x y и выводила ответ. Задачу формализуй: что за функция, где и что известно, к чему доступ должен быть, к чему - нет, КАК ВЫЗЫВАЕТСЯ вычисление значения функции с тем или иным параметром... И чем не устраивает то решение, которое озвучено выше? Навскидку могу дополнительно предложить введенную функцию опять же парсить, загонять в дерево: узлы - операции, или операнды, над которыми эти операции должны выполняться, (или перегонять в ОПЗ - обратную польскую запись, и хранить в виде списка, но тут будет засада с тем, что ты замучаешься реализовывать И вычисления простых арифметических операций, и вычисления функций от одного/двух/трех аргументов) но там, где будут потом подставляться значения аргументов - хранить указатель на какой-то элемент массива аргументов... А потом, при вычислении функции, передавать параметром в функцию вычисления сам массив аргументов. Предупреждаю сразу: в итоге все равно сведется к тому, что и было уже найдено тобой, только ты реализуешь этот велосипед сам. А потом поймешь, что НЕЛЬЗЯ вычислять что-то, что-то вводя, но ничего об этом не зная, в каких-то точках... Я понятно объяснил? Есть несколько готовых классов-парсеров (ООП, естественно), но пока не будет уточнения о том, какие могут быть функции, и что на каком этапе тебе известно, а что надо скрыть, и что когда вычисляется - ссылок не будет. |
Георгий |
9.01.2009 15:55
Сообщение
#15
|
|||
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
Volvo я наверное тебя уже измучил со своими вопросами но все же хочу доделать начатое дело до конца.
матри, вводим "x+y" -------------------------------------------- procedure interpretator(st,var F) - она переводит введеную строку st (x+y) из string в F:=x+y; в переменные тобишь. -------------------------------------------- procedure rez_xy(x,y) процедура должна вычислять значение ф-ии F:=x+y; НО. к ней будет 100500 обращений и нельзя ее прогонять через interpretator вот таким образом: --------------------------------------------
Можно ли сделать вот таким образом:
дак както вот так можно сделать?
|
|||
Lapp |
10.01.2009 3:45
Сообщение
#16
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
дак както вот так можно сделать? Все можно, вопрос нужно ли..Как я понял, тебя волнует скорость выполнения. Ускорить можно, например.. 1. Скомпилировав исходную строку в некий "код", выполнение которого будет проходить быстрее. Желательно его, кстати, делать в польской нотации, которую практически не нужно разбирать (на этом сэкономить время). Это примерно то, что ты сам предлагаешь (запомнить - значит скомпилировать этот код). 2. Можно генерировать код на Паскале (или другом языке такого же уровня) и записывать в файл. Затем этот файл компилировать (разумеется, из программы) и запускать (тоже в программе). Способ довольно реальный, но требует тащить за собой компилятор. 3. Генерить машинный код (иначе говоря, ехе-шник) и запускать. Тоже выполнимая задача. Свистеть будет пулей! "Главное в нашем деле - вовремя остановиться" (С) -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Георгий |
10.01.2009 10:14
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
2 вариант я уже сделал, но это не удобно очень
|
Lapp |
10.01.2009 10:21
Сообщение
#18
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
2 вариант я уже сделал, но это не удобно очень Чем именно? Я вижу только одно "неудобство": время компиляции само по себе очень немалое, так что выигрыш будет ощущаться только на ОООЧЕНЬ больших расчетах.-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Георгий |
10.01.2009 12:01
Сообщение
#19
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
несколько биллионов запросов
|
Lapp |
10.01.2009 12:06
Сообщение
#20
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
несколько биллионов запросов Тогда в чем слстоит упомянутое неудобство?-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 28.09.2024 11:00 |