3Qu
3Qu личный блог
22 марта 2020, 18:00

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

Не далее как вчера опубликовал топик "Смена 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 станет неплохим шаблоном для ваших разработок.
0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн