Коннектор DLL QUIK - QLua(Lua) - C++

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 6, среднее: 5,00 из 5)
Загрузка...

Qlua-csharp-connector-dll
Для Quik 8 x64 скачать готовое решение VS 2019 Community можно по этой ссылке 

Для того, чтобы обмениваться данными между скриптом Qlua и приложением на C# требуется библиотека DLL, написанная на языке C/C++. Для этого в Visual Studio нужно "Создать проект", выбрав язык C++ и тип проекта "Пустой проект". Создайте новую папку для проекта, если необходимо.

В Visual Studio Community 2013 это выглядит следующим образом:
В результате, Visual Studio создаст решение и один проект в нем:
Сейчас можно добавить в проект файл исходного кода
Следующим шагом необходимо добавить в проект заголовочные файлы и библиотеку Lua
Далее, нужно настроить свойства проекта:
Добавление базового кода
Сейчас можно 'Собрать' проект
Использование библиотеки DLL в скрипте QLua(Lua)
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Добавить комментарий

Коннектор DLL QUIK - QLua(Lua) - C++: 80 комментариев

    1. Для сборки ddl под quik 8.5 и lua 5.3 нужно полностью заменить последний блок кода (регистрация названия библиотеки), например на:

      1
      2
      3
      4
      5
      6
      7
      
      extern "C" LUALIB_API int luaopen_QluaCSharpConnector(lua_State *L) {
      	lua_newtable(L);
      	luaL_setfuncs(L, ls_lib, 0);
      	lua_pushvalue(L, -1);
      	lua_setglobal(L, "QluaCSharpConnector");
              return 0;
      }

      хидеры и либу брать с https://sourceforge.net/projects/luabinaries/files/5.3.5/Windows%20Libraries/Static/
      для VS2013(на ней проверял): lua-5.3.5_Win64_vc12_lib.zip
      и не забыть поставить в свойствах проекта платформу x64

  1. с 8 июня 2020 потребуется обновление терминала QUIK до версии 8.5. В связи с необходимостью поддержки 19-значных номеров, в терминале версии 8.5 выполнено изменение версии LUA c 5.1 до 5.3.
    Ссылки: https://forum.quik.ru/forum10/topic5119/, ftp://ftp.quik.ru/public/updates/8.5/quik_8.5.1_upd.zip
    Может кто-нибудь поможет готовым решением (такого же VS-проекта) под LUA c 5.3. и QUIK 8.5.

  2. Здравствуйте Дмитрий и другие авторы комментариев. Вот и я перешел на Квик вер.8.0. Перестали работать 32х разрядные ДЛЛ. Решил пересобрать ДЛЛ на 64 бита.
    Сделал все как написал уважаемый ПавелИ (спасибо за подробное описание). Единственная разница - у меня Visual Studio 2015.
    Так вот, у меня без ошибок собирается программа из примера только если я закомментирую одну строку:

    1
    
    //luaL_openlib(L, "QluaCSharpConnector", ls_lib, 0);

    Если я ее раскомментирую, то появляются ошибки:
    LNK2019 ссылка на неразрешенный внешний символ __iob_func в функции luaL_loadfile \lua5.1.lib(lauxlib.obj) 1
    LNK2019 ссылка на неразрешенный внешний символ fprintf в функции panic \lua5.1.lib(lauxlib.obj) 1
    LNK2019 ссылка на неразрешенный внешний символ sprintf в функции luaO_pushvfstring \lua5.1.lib(lobject.obj) 1
    В то же время функция

    1
    
     lua_pushstring(L, "Привет из C/C++");

    никаких ошибок не вызывает.
    Долго бился, ничего сделать не могу... Помогите пожалуйста разобраться.

  3. Все сделал по указанным в статье примерам. Скрипт писался в нотепаде++ методом копипаста. Длл QluaCSharpConnector в директории Квика есть + еще 3 файла типа .pdb/.lk. Однако при запуске скрипта в квике выходит соббщение, что ДЛЛ с таким именем не найдена. В какую сторону копать, чтобы пример ваш заработал, так как у самого мысли кончились.

  4. Дмитрий,здравствуйте. Пытаюсь пересобрать Вашу библиотеку SenderEmail.dll для Квика вер.8.0. Что-то не выходит. Сделал всё по инструкции, что написал человек в комментариях. Выдает такую ошибку в нескольких строках :
    'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Project1 c:\users\sega\source\repos\project1\project1\project1.cpp 194
    Заранее извиняюсь за наглость, но может Вы могли бы обновить архив EmailSender.zip с перекомпилированной библиотекой под х64?

    1. Я не Дмитрий, но отвечу, надеюсь не обидитесь.
      Если только эта ошибка, то используйте функцию strcat_s вместо strcat . Собственно это и предлагается сделать в описании ошибки. Функция по моему аналогична, только еще нужно передать размер. Опять таки, по моему эта ошибка не связана с разрядностью.

    2. Поправил ошибки, сейчас осталось две :
      1)аргумент типа "WCHAR *" несовместим с параметром типа "const char *" Project1 C:\Users\Sega\source\repos\Project1\Project1\Project1.cpp стр.48
      2)"int strcmp(const char *,const char *)": невозможно преобразовать аргумент 1 из "WCHAR [260]" в "const char *" Project1 c:\users\sega\source\repos\project1\project1\project1.cpp стр. 48
      Всё в одной строке, причем если менять конфигурацию вновь на х32, то ошибка пропадает.

  5. Здравствуйте.
    Квик обновился до 8 версии, теперь он x64

    Помогите создать в visual studio 2013 библиотеку dll

    Просто сменил Release Win32 на Release x64 - не помогло.
    Выдает ошибки
    Ошибка 1 error LNK2001: неразрешенный внешний символ "luaL_openlib"
    Ошибка 2 error LNK2001: неразрешенный внешний символ "lua_pushstring"

    Либо нужны другие файлы lauxlib.h, lua.h, luaconf.h и lua5.1.lib

    Либо нужно как то настроить Visual Studio 2013, но я не знаю как.

    Помогите.

    1. Разобрался. Что и как делал:
      У меня Visual Studio 2013, на других версиях думаю так же, но не пробовал.
      1. Создал проект и настроил его по инструкции как на текущей странице (только файлы брал другие см.п.2, а так же см п.3)
      2. На сайте http://luabinaries.sourceforge.net/ выбрал "Lua 5.1.4 - Release 2 (sources and Visual C++ 8/9 binaries only)" Далее "Windows Libraries" и скачал "lua-5.1.4_Win64_vc12_lib.zip". Скаченные файлы разместил как в в описании.
      3. В Visual Studio 2013, при настройке проекта, я изменил: Конфигурация Активная (Release) Платформа x64 (Создал через диспетчер конфигураций)
      4. Код СИ скопировал для примера.
      5. Проект успешно собрал, dll библиотека появилась.
      6. Создал скрипт Lua, подключил через require. Запустил в QUIK 8.0.1.1 и все заработало.

      1. Подскажите, возникает ошибка
        LNK1561 точка входа должна быть определена!?
        в чем может быть причина..все по инструкции сделал, код из примера взял

      2. Сделал также, но вместо 2-х ошибок LNK2001 появилось 4:
        Error LNK2001 unresolved external symbol __iob_func Clipboard C:\WORK\CPP\Clipboard\Clipboard\Lua5.1.lib(lauxlib.obj) 1
        Error LNK2001 unresolved external symbol fprintf Clipboard C:\WORK\CPP\Clipboard\Clipboard\Lua5.1.lib(lauxlib.obj) 1
        Error LNK2001 unresolved external symbol sprintf Clipboard C:\WORK\CPP\Clipboard\Clipboard\Lua5.1.lib(lobject.obj) 1
        Error LNK2001 unresolved external symbol sprintf Clipboard C:\WORK\CPP\Clipboard\Clipboard\Lua5.1.lib(lvm.obj) 1