Блог им. 3Qu

Переход на 64-бит Quik. Пляски с DLL. 2.

    • 22 марта 2020, 18:00
    • |
    • 3Qu
  • Еще

Не далее как вчера опубликовал топик "Смена x86 Quik 7.27.2.1 на x64 Quik 8.4.1.6. Пляски вокруг DLL", где кратко рассказывалось как перекомпилировать проект С++ с платформы х86 на х64. Надеюсь, что у вас все уже получилось или получится.
Но я «крутой» программист, и, естественно, у меня вначале вообще ничего и никак не получалось. А так как проект большой, да еще и непонятно в чем дело, а своими экспериментами я могу вообще все испортить, то решил сделать маленькую простенькую DLL LuaProba.dll, на ней отработать переход на х64, и потом перенести это в большой проект.
Привожу код С++ DLL целиком:

// LuaProba.cpp: определяет экспортированные функции для приложения DLL.
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>

//=== Необходимые для Lua константы ============================================================================//
#define LUA_LIB
#define LUA_BUILD_AS_DLL

//=== Заголовочные файлы LUA ===================================================================================//
extern "C" {
#include "Lua\lua.h"
#include "Lua/lauxlib.h"
}

static int forLua_TestFunc(lua_State *L) // Возвращает заданный текст
{
        const char *cc = "Привет из C/C++ и от меня 2 раза"; //str.c_str();
        lua_pushstring(L, cc);
        return(1);
}

//= == Регистрация реализованных в dll функций, чтобы они стали "видимы" для Lua == == == == == == == == == == == == == == == ==//
static struct luaL_reg ls_lib[] =
{
        { "TestFunc", forLua_TestFunc },
        { NULL, NULL }
};

//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern "C" LUALIB_API int luaopen_LuaProba(lua_State *L)
{
        luaL_openlib(L, "LuaProba", ls_lib, 0);
        return 0;
}
Весь проект DLL для VS 2015 можно скачать по ссылке -  https://yadi.sk/d/YxT-K2-O8WmOQw

Собственно, в DLL всего одна функция - forLua_TestFunc(lua_State *L), которая вызывается из Quik Lua, и печатает в Quik текст — «Привет из C/C++ и от меня 2 раза». Остальное, это типовые необходимые для взаимодействия с Lua функции и пр.

Для вызова функции из нашей DLL напишем простенький Lua скрипт, и поместим его в папку Quik\Lua.
Сам Lua скрипт:
LP1 =require("LuaProba")

message(LP1.TestFunc())
message(_VERSION)
Скрипт скачивается по ссылке - https://yadi.sk/d/q6wGa3D2Ll9WmA

Компилируем DLL, помещаем ее в папку Quik, запускаем скрипт Lua, и видим на экране:

Переход на 64-бит Quik. Пляски с DLL. 2.

Вот и все.
Возможно эта DLL станет неплохим шаблоном для ваших разработок.
  • обсудить на форуме:
  • QUIK
2.7К | ★14

Читайте на SMART-LAB:
Фото
Газета «Коммерсант» выпустила тематическое приложение о страховом рынке
Много интересных материалов для тех, кто работает в отрасли и тех, кто так или иначе с ней связан. Полагаем, публикации могут быть интересны и...
Фото
🥳 В десяточку! Два выпуска на сумму более 10 млрд рублей
ГК «А101» завершила сбор книги заявок на два выпуска облигаций общим объемом 10,5 млрд рублей. Начало торгов состоится 26 декабря....
Фото
Облигации «Акрона» — удобряем портфель валютой
На фоне крепкого рубля и быстро меняющейся конъюнктуры на рынке облигаций внимание инвесторов все чаще переключается на валютные выпуски...
Фото
Какая доходность среди облигаций с наивысшим рейтингом надежности и сроком погашения от 3 лет?

теги блога 3Qu

....все тэги



UPDONW
Новый дизайн