vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
|
|
#1 | |
Компиляция исходного кода в работающей программе - C++07.07.2014, 16:21. Просмотров 1662. Ответов 47
Метки нет Все метки)
(
Привет.
Подскажите, как можно скомпилировать код, и использовать полученный результат в запущенной программе, если этот самый код находится, в компоненте (memo, list итд - неважно) этой запущенной пргораммы. Я нашел 1 вариант - это сохранение этого кода в файл и компиляция в отдельном процессе. Это правильный вариант? и есть ли еще пути решения?
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
07.07.2014, 16:21 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Компиляция исходного кода в работающей программе (C++):
47
Загрузка исходного кода и компиляция *.exe - C++ Компиляция исходного кода C++ ubuntu если нет компилятора g++ - C++ Исправить ошибку в программе, работающей с дробями - C++ Компиляция кода в приложении - C++ Компиляция кода Freeglut - C++ Компиляция кода в командной строке - C++ |
DrOffset
7512 / 4508 / 1024
Регистрация: 30.01.2014
Сообщений: 7,362
|
|
07.07.2014, 18:18 | #16 |
Без специальных ухищрений и не получится (ну кроме целочисленного результата из main).
Если я правильно понял, то вариант 3) - это как раз модифицированный вариант 1). Компилятор вызывается, собирает код в dll, потом эта dll загружается в приложение и вызывается функция. Шаблон здесь конечно же не С++. Я думаю имелось в виду, что имена функций в dll и их сигнатура должны быть типовыми (т.е. строится по шаблону), иначе мы не будем знать что же нам вызывать в итоге. Добавлено через 5 минут А, и да. К четвертому варианту надо бы еще добавить и это. Там есть пример (main.cpp).
1
|
AlexVRud
468 / 179 / 47
Регистрация: 04.07.2014
Сообщений: 494
|
|
07.07.2014, 19:55 | #18 |
Подкину ещё идею. Можно посмотреть в сторону встраивания скриптовых языков в программу, например Lua. Делается это намного проще.
0
|
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
|
||||||
08.07.2014, 13:10 [ТС] | #19 | |||||
Руками собрал и скомпилил dll при помощи mingw, а вот с помощью CreatProcess не создается файл example_dll.o
0
|
AlexVRud
468 / 179 / 47
Регистрация: 04.07.2014
Сообщений: 494
|
|
08.07.2014, 13:17 | #20 |
0
|
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
|
||||||
08.07.2014, 13:23 [ТС] | #21 | |||||
так?
0
|
DrOffset
7512 / 4508 / 1024
Регистрация: 30.01.2014
Сообщений: 7,362
|
||||||
08.07.2014, 15:13 | #22 | |||||
vlinx, жестоко ты с ним, зачем же ты его убил, он даже сделать ничего не успел. Это я про TerminateProcess.
Надо было как-то так:
1
|
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
|
||||||
08.07.2014, 16:38 [ТС] | #23 | |||||
DrOffset, действительно) спасибо!
сейчас попробую сделать чтобы было все динамически. Добавлено через 47 минут Получилось следующее:
2) Разобьем и запишем эту строку на определение и объявление введенной в MEMO ф-ии 3) Компилим DLL 4) Загрузка DLL и вызов ф-ии Сейчас непойму, почему при компиляции dll выпадают ворнинги: extra tokens at #ifndef derective (example_dll.h) , то ли пробелы не нарвятся, то ли кодировка файла... в результате : function not found Добавлено через 5 минут и почему-то размер dll стал 471кб, а было 14
0
|
DrOffset
7512 / 4508 / 1024
Регистрация: 30.01.2014
Сообщений: 7,362
|
||||||
08.07.2014, 16:54 | #24 | |||||
Накосячил при формировании хедера.
Должно быть как-то так:
Из-за <iostream> в dll.
1
|
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
|
|
08.07.2014, 16:56 [ТС] | #25 |
26! причем это день моего день рождения)) чисто случайно так совпало)))
супер. кстати, DrOffset, при формировании хедера, я нетуда внес определение функции. А какие определения тогда можно вносить в ту секцию?
0
|
DrOffset
7512 / 4508 / 1024
Регистрация: 30.01.2014
Сообщений: 7,362
|
|
08.07.2014, 16:58 | #26 |
0
|
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
|
|||||||||||
08.07.2014, 17:02 [ТС] | #27 | ||||||||||
Этот вариант сработал
Этот вариант не сработал
0
|
DrOffset
7512 / 4508 / 1024
Регистрация: 30.01.2014
Сообщений: 7,362
|
|
08.07.2014, 17:09 | #28 |
![]()
Я понял. Да можно было и там оставить. Мне было просто лень все перепечатывать. Ошибка-то была из-за отсутствия переноса строк после директив.
Добавлено через 5 минут А, ну надо функцию помечать как extern "C". Иначе ее имя будет декорировано как С++-сное (аргументы, спецификации исключений и т.п.). И выглядеть оно будет как-то так (это зависит от компилятора): Z10get_my_innii. extern "C" явно говорит о декорации в стиле С. В С нет перегрузок, исключений и т.п. фигни, поэтому имя функции - это только имя функции.
1
|
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
|
|
08.07.2014, 17:14 [ТС] | #29 |
Возвращаясь к 4 нашим вариантам..
Получается вариант 3 практически реализован. И у него 2 зависимости (в вызывающем коде): 1) Указатель на ф-ию (прототип) 2) Вызов ф-ии (тоже по прототипу нужно вызывать) тут, я думаю, можно опять делать парсинг input_memo_text и считать кол-во и типы параметров и рез-тат ф-ии. а ниже сделать некий switch по возможным вариантам... вообщем пудумаю еще. отпишусь
0
|
DrOffset
7512 / 4508 / 1024
Регистрация: 30.01.2014
Сообщений: 7,362
|
|
08.07.2014, 17:16 | #30 |
vlinx, Кстати вот статья на тему декораций имен.
1
|
08.07.2014, 17:16 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
08.07.2014, 17:16 |
Привет! Вот еще темы с ответами:
30
Компиляция C++ кода через консоль - C++ Компиляция кода... не могу сообразить. - C++ Компиляция кода под конкретную ОС - C++
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |