Sooooo Я пишу интерпретатор script. И в основном, я хочу, чтобы некоторые классы и функции хранились в DLL, но я хочу, чтобы DLL искала функции в программах, которые связываются с ним, например,
program dll
----------------------------------------------------
send code to dll-----> parse code
|
v
code contains a function,
that isn't contained in the DLL
|
list of functions in <------/
program
|
v
corresponding function,
user-defined in the
program--process the
passed argument here
|
\--------------> return value sent back
to the parsing function
Мне было интересно, как мне скомпилировать DLL с gcc? Ну, я использую порт windows gcc. Как только я скомпилирую DLL, содержащую мои классы и функции, как мне связать с ней мою программу? Как использовать классы и функции в DLL? Может ли функция вызова DLL из программы связываться с ней? Если я создаю объект класса {...}; в DLL, тогда, когда DLL загружается программой, объект будет доступен для программы? Заранее спасибо, мне действительно нужно знать, как работать с DLL на С++, прежде чем я смогу продолжить этот проект.
"Можете ли вы добавить более подробную информацию о том, почему вы хотите, чтобы DLL вызывала функции в основной программе?"
Я думал, что вид диаграммы объяснил это... программа, использующая DLL, передает кусок кода в DLL, который анализирует код, и если вызовы функций найдены в указанном коде, тогда соответствующие функции в DLL вызываются... например, если я передал "a = sqrt (100)", то функция парсера DLL найдет вызов функции для sqrt(), а внутри DLL будет соответствующая функция sqrt(), которая будет вычислять квадратный корень аргумента, переданного ему, а затем он примет возвращаемое значение из этой функции и поместит его в переменную a... точно так же, как любая другая программа, но если соответствующий обработчик для функции sqrt() не найден в пределах DLL (там будет список поддерживаемых изначально функций), тогда он будет вызывать аналогичную функцию, которая будет находиться внутри программы, используя DLL, чтобы узнать, есть ли какие-то пользовательские функции этим именем.
Итак, скажем, вы загрузили DLL в программу, предоставляя вашей программе возможность интерпретировать сценарии этого конкретного языка, программа могла вызвать библиотеки DLL для обработки отдельных строк кода или передать им имена файлов сценариев для обработки... но если вы хотите добавить команду в script, которая подходит для вашей программы, вы можете сказать, что в DLL необходимо указать логическое значение, указывающее, что вы добавляете функции на свой язык, а затем создаете функцию в своем коде, которая список функций, которые вы добавляете (DLL будет вызывать его с именем функции, которую она хочет, если эта функция является определяемой пользователем, содержащейся в вашем коде, функция будет вызывать соответствующую функцию с аргументом, переданным ей DLL, вернуть возвращаемое значение пользовательской функции обратно в DLL, а если оно не существует, оно вернет код ошибки или NULL или что-то еще). Я начинаю видеть, что мне придется найти другой способ обойти это, чтобы вызовы функций проходили только в одну сторону.