Использовать объект библиотеки C ++ из Lua - PullRequest
0 голосов
/ 14 сентября 2018

Итак, последние несколько часов я пытался выяснить, как использовать классы C ++, содержащиеся в статических (или динамических) библиотеках, изнутри Lua. Я нашел несколько пакетов, таких как LunaFive или SimpleCppBinding , но мне кажется, что я не понимаю, как их правильно использовать. Из того, что я вижу, есть главная функция, поэтому я предполагаю, что это не библиотека, а исполняемый файл, который я запускаю, а затем запускаю скрипт Lua, который перехватит приложение и получит класс, или что-то еще? Что я в основном хочу сделать, это:

  1. создать библиотеку, содержащую, например, класс 'Player' в C ++
  2. изменить эту библиотеку, чтобы ее можно было использовать из Lua
  3. каким-то образом использовать этот класс и его методы из Lua так же, как если бы это был класс Lua

Такое вообще возможно? И если да, то может ли кто-нибудь объяснить, как это можно сделать?

В настоящее время я нахожусь в Windows, но я могу сделать это и в Linux. В Windows я использую VS, в Linux я бы использовал CLion в паре с g ++. Lua 5.3.

Я не уверен, что это несколько уместно, но я разрабатываю игровой режим для FiveM (многопользовательский клиент GTA V). FiveM поставляется с поддержкой Lua для скриптинга по умолчанию, но я бы хотел использовать некоторые стандартные библиотеки и функции C ++. Поэтому я бы очень хотел создать несколько библиотек для сервера на C ++, а затем использовать их из Lua, поставляемого FiveM.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Lua с самого начала была разработана для интеграции с программным обеспечением, написанным на C и других традиционных языках.Эта двойственность языков приносит много преимуществ.Lua - крошечный и простой язык, отчасти потому, что он не пытается делать то, для чего C уже хорош, например, высокую производительность, низкоуровневые операции или интерфейс со сторонним программным обеспечением.
-Preface

Я понимаю вашу боль, однако Lua просто не предназначен для использования в соответствии с вашими намерениями, он на самом деле построен для использования наоборот.

Самая близкая вещь, которую я могу придумать, чтобы получить желаемый результат, - это иметь приложение C ++ хоста, из которого вы немедленно создаете состояние lua и извлекаете результаты функций, из которых вы вызвалиПрограмма C ++ в стек, в свою очередь, может быть использована в вашем Lua-скрипте и обработана.

Если это то, что вы можете настроить, вот отличная отправная точка

0 голосов
/ 14 сентября 2018

Статическая библиотека: не возможно. Возможны следующие варианты: 1. динамическая библиотека (двоичная) с некоторым интерфейсом, доступным для исполняемого файла Lua (Alien, специфичные для Lua ловушки ...) или 2. настраиваемый исполняемый файл, который включает в себя движок Lua и материал C ++ с некоторыми клей. Ваши примеры с функцией 'main', вероятно, относятся к последнему типу.

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