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

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

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

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

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

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

  1. Тема уже не новая, но надеюсь кто нибудь сможет мне помочь. Проблема в следующем - при попытке запустить скрипт lua уже на первой строчке падает исключение - Не найдена указанная процедура. Error loading module '' from file ''. Пробовал по всякому компилировать - в дебаг в реалайз, установил luaforwindows и подключил lua5.1.dll к С++ проекту - без результата. Использовал Dependency Walker что бы посмотреть dll и обнаружил что пока dll лежит в папке дебага то ошибок в зависимостях нет, но стоит её скопировать в папку квика - вылазит куча ошибок - `не удается найти указанный файл`. может кто подскажет как это побороть ?

      1. Да, все по инструкции. Проверял dll с помощью dependency walker - получил ошибку следующего содержания:
        Error: Modules with different CPU types were found.
        скрин -
        https://cdn1.savepice.ru/uploads/2018/1/26/afdf25a2deb777e6690119477197e815-full.png
        Но мне слабо верится что дело только в этом - как бы dll вообще бы собралась?

        1. Пока не понятно только как стороннему приложению на C# работать с терминалом через dll и как заставить скрипт запускаться одновременно с запуском самого квика, но наверное я еще не дошел до этого.

  2. Объясните мне пожалуйста, почему я не могу сделать коннектор со с# при помощи LuaInterface или NLog без всякого гемора с с++ или оберток к qlua.dll? Ведь в скрипте можно обернуть любую функцию qlua, в калбеках я могу ковертировать таблицы в класс LuaTable или какие-нибудь свои структуры и вызвать функцию зажигающее событие .net... Где засада?

      1. Здравствуйте, я не изучал вопрос не по LuaInterface не по NLua, так что ничего не могу сказать по этому поводу. Вот здесь один из участников сайта привел пример того, как без C++ обходится в связке, может быть Вам это поможет: https://quikluacsharp.ru/stati-uchastnikov/lua-c-bez-s-dll/
        Если Вы найдете более простой работающий способ, поделитесь, пожалуйста, думаю многим будет интересно. Сам я, когда искал решение, наткнулся на вариант с C++, он меня устроил и я на нем остановился.

  3. Добрый день всем.
    Ошибка - error loading module 'QluaCSharpConnector' from file '.\QluaCSharpConnector.dll':. Не найден указанный модуль.

    РЕШЕНИЕ ПРОБЛЕМЫ на компах, отличных от того на котором собирали dll (для Visual Studio. С другими IDE не подскажу - сам бы хотел знать):
    1. Компилить в Release.

    2. Использовать опцию "Runtime Library = Multi-Threaded (/MT)" в
    настройках C++ проекта.
    (картинка https://quik2dde.ru/static-img/cpp_lua-2-03.png)
    (Solution Explorer -> ПКМ на проекте -> раздел C++ -> Code Generation.
    Там ставим Runtime Library = Multi-Threaded /MT.)

    3. На Visual Studio 2012 и выше использовать XP toolset для того,
    чтобы программа могла работать на Windows XP и Server 2003.
    (картинка http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/7725.xptarget.png)
    (Solution Explorer -> ПКМ на проекте -> Configuration Properties -> - General .
    Там ставим Platform toolset =XP toolset.)

    P.S. Сам столкнулся с проблемой, когда отправил другу готовую DLL. Долго не мог понять почему у меня работает, а у него нет. Оказалось что можно не устанавливать ни LuaForWindows ни в microsoft c++ redistributable 20ХХ года, а просто собрать dll со всеми зависимостями.
    P.S.S. Нашел подробное описание 2го пункта тут: https://quik2dde.ru/viewtopic.php?id=18&p=2

  4. Процесс создания dll-библиотеки ясен, за что вам Спасибо.

    Но как эту библиотеку прицепить к C# приложение???
    И как из своего приложения посылать в луа-скрипт сообщения или команды и наоборот из луа скрипта посылать данные в приложение?

  5. Здравствуйте. DLL написанная на С++ в VS 2015 работает. Но мне удобнее работать с DLL в Builder C++6. Компилируется нормально, но никак не могу запустить. Quik выдает ошибку "errorloading module 'QLuaCPP' from file '.\QLuaCPP.dll': Не найдена указанная процедура." ДЛЛки в Билдере немного по другому делаются (__declspec(dllexport)). Может что подскажите...

  6. На другой машине где не было компиляции скорее всего не хватает microsoft visual c++ 2013(либо другой номер, посмотрите какой использовался при компиляции) для windows 7 32 bit