Как мне вызвать функции внутри C ++ DLL из Lua? - PullRequest
4 голосов
/ 14 мая 2010

У меня есть DLL, написанная на C ++, которая является устаревшим кодом и не может изменить исходный код. Я хочу иметь возможность вызывать некоторые функции внутри DLL из Lua .

Например, я хотел бы сделать что-то вроде этого:

-- My Lua File
include(myCppDll.dll)

function callCppFunctionFromDll()
     local result = myCppFunctionFromDll(arg1, arg2)
     --Do something with result here
end

Возможно ли что-то подобное?

Ответы [ 3 ]

3 голосов
/ 15 мая 2010

Если Alien не соответствует вашим потребностям, и его может быть непросто использовать, если DLL имеет строго объектно-ориентированный интерфейс, где вам нужно получить доступ к элементам и методам объектов, а также просто вызвать экспортированные функции, тогдаВы должны взглянуть на создание DLL-оболочки-оболочки, которая связывает устаревший API-интерфейс с DLL-библиотекой Lua.

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

Lua также достаточно простой код, для которого может быть проще написать собственную оболочкувручную в C. Чтобы сделать это, начните со стандартного рецепта для создания вызываемого модуля Lua в C и реализуйте функции, которые передают аргументы из стека Lua в форму, подходящую для каждого вызова API, вызывают в DLL и помещают любыерезультаты обратно в стек Lua.Это также место, где можно воспользоваться возможностью Lua возвращать более одного результата для тех функций, которые в DLL должны были использовать выходные указатели для обработки второго (или более) возвращаемого значения. обсуждение вопросов и некоторые примеры кода доступны на вики Lua User.

Также есть страница, посвященная привязке Lua к другим языкам в Lua.Вики пользователя.

3 голосов
/ 14 мая 2010

Попробуйте Alien: http://alien.luaforge.net/

Существует также C / Invoke: http://www.nongnu.org/cinvoke/lua.html

0 голосов
/ 15 мая 2010

Вам придется использовать либо автоматизированный инструмент, либо написанный от руки интерфейс C ++. Lua не может обработать прямой код C ++.

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