гадать не видя весь код бессмысленно. Сообщение говорит, что функции нет. еще раз скажу, отлаживайте свою функцию без квик. Научитесь сначала писать dll для луа. Полагаю Вы знаете как отладить софт.
#include <iostream>
#include <windows.h>
//=== Необходимые для Lua константы ============================================================================//
#define LUA_LIB
#define LUA_BUILD_AS_DLL
//=== Стандартная точка входа для DLL ==========================================================================//
BOOL APIENTRY DllMain(HANDLE hModule, DWORD fdwReason, LPVOID lpReserved)
{
//Вроде бы это не обязательно
return TRUE;
}
//=== Заголовочные файлы LUA ===================================================================================//
extern "C"
{
#include "C:\\Users\\Serg\\source\\repos\\Quil_Lua_connector\\Lua_staticlib_files_x64_5.4\\lauxlib.h"
#include "C:\\Users\\Serg\\source\\repos\\Quil_Lua_connector\\Lua_staticlib_files_x64_5.4\\lua.h"
}
#pragma comment(lib, "C:\\Users\\Serg\\source\\repos\\Quil_Lua_connector\\Lua_staticlib_files_x64_5.4\\lua54.lib")
//=== Заголовочные файлы LUA ===================================================================================//
//=== Реализация функций, вызываемых из LUA ====================================================================//
static int forLua_TestFunc(lua_State* L) {
lua_pushstring(L, "Привет из C/C++");
return(1);
}
//=== Регистрация реализованных в dll функций, чтобы они стали "видимы" для Lua ================================//
static struct luaL_Reg ls_lib[] = {
{"TestFunc", forLua_TestFunc},
{NULL, NULL}
};
//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern "C" LUALIB_API int luaopen_lua_dll_x64_name(lua_State * L)
{
luaL_newlib(L, ls_lib);
lua_setglobal(L, "lua_dll_x64_name");
return 1;
}
3)Компилирую этот код release/x64 и Visual Studio Создает - lua_dll_x64_name.dll 4)Помещаю созданный .dll в папку с info.exe. 5)Запускаю Quik и запускаю следующий скрипт:
Код
path = getScriptPath() .. "\\lua_dll_x64_name.dll"package.loadlib(path, "luaopen_lua_dll_x64_name")()
function main()
message(lua_dll_x64_name.TestFunc())
end
6)И квик сразу же выдает ошибку:
Код
...Lua_script.lua.txt:2: attempt to call a nil value
Вы напишите, как я написал или разбирайтесь как правильно раскрыть макрос -------------- (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0)) и нужно ли удалять значение из стека lua_pushvalue(L, -1); -------------------- у меня один оператор, а умник наплодил три.
Извините, не могу зарегистрироваться на том форуме, не приходит письмо активации.
Если есть возможность, то могли бы Вы подсказать ? Сделал, как в Вашем примере на 3 стр, Visual Studio создала dll ---> "lua_dll_x64_name.dll" - компилировал, как debug x64. Скопировал "lua_dll_x64_name.dll" в папку с quik, где находится файл Info.exe и запустил скрипт:
Код
path = getScriptPath() .. "\\lua_dll_x64_name.dll"
package.loadlib(path, "luaopen_lua_dll_x64_name")()
function main()
message(lua_dll_x64_name.TestFunc())
end
Однако quik выдает ошибку:
Код
Lua_script.lua.txt:3: attempt to index a boolean value (global 'lua_dll_x64_name')
Serg_ написал: Подскажите, есть ли какие ни будь условно официальные примеры, как связать С++ с Quik ? Как сделать dll ?
Все есть безусловно официально. В КВИК встроена виртуальная машина луа без каких либо изменений исходников поэтому читайте API C для lua. ------------------------- Я так пишу функции для QUIK на СИ от колбек до многопоточной обработки данных в LUA. ---------------------- QLUA - это библиотека написанная на API C. -------------------- Или в чем то другом проблема?
Не могу понять, как через dll - все это делать. Откроено говоря - это неМного геморрой. Продукту 20 лет, а нормального API почему то нет.
Но я бы не стал. Слишком тонко/ненадежно получится, думаю. Да и зачем?
Но причем тут эмуляция кликов ? Вопрос бы в том, как с помощью Quik qlua добавить вкладку и добавить на ней график свечей какого либо инструмента ? Если мне нужна умуляция кликов - я использую WinApi, но как Вы и написали - в данном случае это будет "Слишком тонко/ненадежно" - поэтому и спрашиваю про qlua, есть ли там что то подобное ?