Serg_ пишет:не int main, а функция из dll вызываемая скриптом из самого Квика, которая и передает "L"
Поздно. Надо делать в luaopen_XXX
Есть нюанс в том, как QUIK распознает наличие callback-функций.
Когда загружается Lua-скрипт, он выполняется, что приводит к
1) выполнению кода, находящегося все function
2) формированию в глобальной области видимости имен переменных-функций с именами, указанных в function
Пункт 2) - это особенность Lua, когда синтаксис описания функций на самом деле просто определяет глобальные переменные с тем же именем, что названа функция, тип у этих переменных "функция", и содержимое равно описанию функции.
Пункты 1) и 2) делает сам интерпретатор Lua.
После этого QUIK просматривает все глобальные определения, ищет среди них известные имена callback-функций и для тех callback, которые находит, у себя прописывает признак "такой callback найден".
Далее, когда возникает то или иное событие, QUIK смотрит был ли определен соответствующий callback, и если был - то он вызывается, а если не был -то не вызывается.
Т.е. если какой-то callback не был определен на старте скрипта - то он уже никогда не вызовется, даже если в процессе работы скрипта его доопределить (синтаксис Lua это позволяет).
Эта особенность работы давно была обнаружена при использовании Lua в QUIK, про нее надо просто знать и учитывать. Сделано разработчиками видимо для ускорения, чтобы для каждого события не сканировать заново глобальные определения в поисках функции-обработчика.
Соответственно у вас при определении callback в dll происходит тоже самое: стартовый скрипт загружается, выполняется, в этот момент из библиотеки вызывается luaopen_XXX. Если эта функция что-то добавила в глобальную область видимости - то соответствующие callback будут вызываться; если не добавила - то потом уже добавлять какие-то callback-функции бесполезно, QUIK про них не знает (на этапе загрузки скрипта) и вызывать не будет.